首页 > 编程知识 正文

二叉树前序中序后序遍历算法,按层次遍历二叉树

时间:2023-05-06 01:43:51 阅读:30002 作者:4196

介绍了二叉树中序扫描三种方法中序扫描的三种方法:递归、迭代、Morris方法。 其实,二叉树的其他遍历也有这三种遍历方法。 这里介绍前面遍历的三种方法。

1、递归法

调整访问顺序即可。 代码如下。

//recursionclasssolution1{ public : vectorintpreordertraversal (treenode * root ) { vectorint ret; 前帮助程序(ret,root ); 返回ret; } private 3360 voidprehelper (向量,趋势科技*路由) if ) root==null ) return; ret.push _ back (根val; 前帮助程序(ret,root-left ); 前帮助程序(ret,root-right ); };

2、迭代法

迭代法使用堆栈来保存当前不需要访问的节点。 从根节点访问当前节点,按从右儿子到左儿子的顺序堆栈当前节点的两个儿子。 堆栈为空表示遍历已完成。 代码如下。

//iterativeclasssolution2{ public : vectorintpreordertraversal (treenode * root ) { vectorint ret; 堆叠趋势科技* ST; if (根==空)返回ret; ST.push (根; while (! st.empty () ) { TreeNode *curr=st.top; st.pop (; if(curr-right ) ST.push ) curr-right; if(curr-left ) ST.push ) curr-left; ret.push_back(curr-val; }返回ret; };

3、Morris方法

前扫描和中扫描的Morris方法基本相同,不同之处在于访问顺序。 代码如下。

//morrisclasssolution3{ public : vectorintpreordertraversal (treenode * root ) { vectorint ret; if (根==空)返回ret; TreeNode *curr=root; TreeNode *pre; while(curr ) if ) curr-left==null ) ret.push _ back (curr-val ); curr=curr-right; } else { pre=curr-left; 预光预光!=curr(pre=pre-right; if (前光线==null ) ret.push_back(curr-val ); 前光=curr; curr=curr-left; } else {前光=null; curr=curr-right; } }返回ret; };

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。