/*给出二叉树的根节点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; };