首页 > 编程知识 正文

先序和后序确定二叉树,二叉树的后序遍历详解

时间:2023-05-05 14:53:10 阅读:34412 作者:4004

/*给出二叉树的根节点root,并返回其中序遍历。 输入: root=[1,null,2,3 ]输出: [ 1,3,2 ]提示:树中的节点数在范围[ 0,100 ]内-100=Node.val=100*/递归,最简单:

/* * definitionforabinarytreenode.* struct treenode { * intval; * TreeNode *left; * TreeNode *right; *treenode(3360val )0)、left (nullptr )、right (nullptr ) * treenode (intx ) 3360val )、left (nullptr ) ) ) )。 TreeNode *left、treenode*right(:val ) x )、left )、right ) {}*; */class解决方案{ public : vectorintinordertraversal (treenode * root ) { vectorint q; DFS (根、q ); 返回q; }voidDFS(treenode*node,vectorint ans ) if ) node==nullptr ) return; 节点左(DFS ); ans.push_back(node-val; 节点光(ans ); }; 迭代(通过堆栈实现)

和递归一样,左节点必须先进入堆栈,然后处理中间,处理右

类解决方案{ public : vectorintinordertraversal (treenode * root ) if (root==nullptr ) return {} ); 堆叠趋势科技* ST; 矢量int ans; wile (路线!=nullptr ||! st.empty ()//右边的节点进入堆栈)左边) while (根!=nullptr () ST.push ) ) root; 根=根左//当前节点(中)根=ST.top ); st.pop (; ans.push _ back (根值; //往右(右) root=root-right; }返回Ans; }; 染色法(0没用过,1用过,进入堆栈的顺序和递归的顺序相反() )。

class solution { public : vectorintinordertraversal (treenode * root ) { stackpairTreeNode*,int st; 矢量int ans; ST.push({root,0}; while (! st.empty () ({ auto node=st.top ) ).first; auto color=st.top ().second; st.pop (; if(node==nullptr ) { continue; }if(color==0) ST.push ) make_pair ) node-right,0 ); ST.push(make_pair ) node,1 ); ST.push(make_pair ) node-left,0 ); }else{ans.push_back(node-val ); } }返回Ans; };

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