当前位置:   article > 正文

DAY14 二叉树

DAY14 二叉树

第一题 递归:

在正式的递归函数之前用一个void函数来作为后面调用的程序,因为限制条件是没有返回值的,就要用void

前序遍历

根节点 push 根节点的值 根节点的左孩子 左孩子的值 左孩子的左孩子。。。。。。。。直到最后一层的左孩子的左指针调用函数的时候==NULL了就进入return语句,返回到最后一个左孩子的父亲,走这个程序中的右孩子,右孩子push完,它的左指针==NULL就return,返回到再上面一层,直到返回到根节点,走根节点的右孩子,push完这个右孩子的值就走右孩子的左孩子,重复左树的一切,直到最后一个右孩子走完

中序遍历:

对于整体来说是左中右,根节点,!=NULL,走第一个左孩子!=NULL,继续走左孩子,直到最后一个左孩子的左指针==NULL,return到最后一个左孩子,push这个左孩子的节点值,左孩子的右指针,==NULL,return,最后一个左孩子的程序全部走完,到左孩子的父亲,push这个的节点值,再是它的右孩子,重复,一直到根节点,push根节点的节点值,右孩子进入程序,此时这个第一个右孩子就相当于另外一棵树的根节点了,右孩子的左孩子进入程序,一直左孩子,最后一个左孩子的值push进去,返回父亲然后右孩子进去程序,重复,直到最后一个右孩子

后序遍历:

对于整体来说是左右中

根节点,一直左孩子进入程序,最后一个左孩子的左指针和右指针都==NULL,push该节点值,结束该节点后,进入上一层的父亲节点,右孩子进入程序,右孩子的左指针和右指针都==NULL,push这个右孩子的节点值,返回到父亲节点,右孩子也走完了所以push它的节点值,这个结点结束后就找它的父亲,以此类推,到根节点了,进入第一个右孩子,右孩子又开始找它的左孩子,一直到最后一个,push完它的结点值再找它的父亲,走这个节点的右孩子,push,返回这个父亲节点push它本身的节点值,然后返回这个节点的父亲,再找这个父亲的右孩子,以此类推,最后返回到根节点,push完根节点的节点值,回到最开始的程序层,结束程序的调用

第二题 迭代遍历:
前序遍历:中左右

push根节点 pop出去 push节点值

push根节点的右孩子 左孩子(因为先进后出 整体是中左右)

pop栈顶节点 push其节点值

push栈顶的右孩子 左孩子

一直重复

中序遍历:左中右

设置一个cur等于根节点,push进栈,只要cur->left不为空就一直push左节点进栈

当为空时,就让栈头的结点的值作为处理值,同时弹出这个即将被记录值的结点,节点值进去vec容器,同时设置cur=cur->right,让这个新的cur参与后面的循环

循环里面就是优先处理左节点

后序遍历:左右中

调整一下前序遍历中的左右节点入栈顺序,让左节点先入栈(也就是后出栈),再对整体的vec进行一个翻转即可

第三题:统一迭代

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/943364
推荐阅读
相关标签
  

闽ICP备14008679号