多叉树(二叉树)的递归与非递归的后序遍历
2018-01-25 21:08
330 查看
之前说过前序遍历
这次我就教教大家如何用前序遍历的方法搞定后序遍历
之前写过的结构体不再重复书写了
观察下后续遍历恰好是前序遍历的反向,那么我们有没有什么方便的方法解决吗
有我们利用两个栈
二叉树的
为什么这么做观察
当前序遍历更改左右子树顺序
那么代码恰好是上面不使用第二个辅助栈的解法
那么反转后的答案就是我们后序遍历的答案
多叉树参考之前利用树的思路与这里用辅助栈前序代替后序
这次我就教教大家如何用前序遍历的方法搞定后序遍历
之前写过的结构体不再重复书写了
void dfs( TreeNode *root ){ if( root == NULL ) return ; dfs( root->left ); dfs(root->right ); cout << root->val<<endl ; }
观察下后续遍历恰好是前序遍历的反向,那么我们有没有什么方便的方法解决吗
有我们利用两个栈
二叉树的
vector<int> postorderTraversal(TreeNode* root) { vector<int> ans ; if( root == NULL ) return ans ; stack< TreeNode * > slist; stack< int > res ; slist.push(root); while( slist.size() ){ TreeNode *top = slist.top(); slist.pop(); res.push(top->val); if( top ->left) slist.push(top->left); if( top->right ) slist.push(top->right); } while( res.size() ){ ans.push_back( res.top()) ; res.pop(); } return ans ; }
为什么这么做观察
当前序遍历更改左右子树顺序
void dfs( TreeNode *root){ if( root == NULL ) return NULL ; cout << root->val <<endl; dfs( root->right ); dfs( root->left); }
那么代码恰好是上面不使用第二个辅助栈的解法
那么反转后的答案就是我们后序遍历的答案
多叉树参考之前利用树的思路与这里用辅助栈前序代替后序
vector<int> postorder(Node* root) { vector<int> ans ; if( root == NULL ) return ans ; stack< Node *> slist ; stack<int> res; slist.push(root ); while( slist.size() ){ Node * top = slist.top(); slist.pop(); res.push(top->val); for( int i=0 ; i<top->children.size() ; i++){ slist.push( top->children[i] ) ; } } while( res.size() ){ ans.push_back( res.top()) ; res.pop(); } return ans ; }
相关文章推荐
- 二叉树的先序,中序,后序,层次的递归及非递归遍历
- 二叉树2:层次遍历方式及先序、中序、后序(递归与非递归)遍历方式
- 二叉树的前序、中序、后序遍历(递归与非递归)
- 二叉树的先序中序后序遍历 (递归和非递归)
- 二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现
- 二叉树的前、中、后序遍历(递归与非递归)
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- JAVA实现二叉树的前、中、后序遍历(递归与非递归)
- 二叉树的前、中、后序遍历(递归和非递归)、层序遍历、深度、叶子节点个数
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归) 层次遍历
- 二叉树前、中、后序遍历(递归与非递归)
- 数据结构---二叉树的前序、中序、后序遍历的递归和非递归 实现(C++)
- 二叉树的深度优先dfs遍历(前序、中序和后序;递归与非递归)
- 二叉树的递归和非递归前、中、后序遍历
- 二叉树详解及二叉树的前序、中序、后序遍历(递归和非递归)
- 构建二叉树(据后序遍历序列)---后续遍历二叉树(递归与非递归)
- C++二叉树之构造拷贝赋值,递归和非递归的前序遍历,中序遍历和后序遍历,以及层序遍历
- c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
- 用非递归实现二叉树的前序、中序、后序、层次遍历,用递归实现查找、统计个数、比较、求深度
- 数据结构:二叉树的前序,中序,后序遍历(递归和非递归)