二叉树-专题
Posted simple_wxl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树-专题相关的知识,希望对你有一定的参考价值。
题型一:非递归遍历二叉树后续
struct node { bool isfirst; int val; TreeNode* left,*right; node(int _val,bool _isfirst){ val=_val; isfirst=_isfirst; this->left=this->right=NULL; } }; vector<int> postorderTraversal(TreeNode *root) { // write your code here vector<int> ret; stack<node> sta; TreeNode* p=root; while(sta.size()>0||p) { while(p) { node n1(p->val,false); n1.left=p->left; n1.right=p->right; sta.push(n1); p=p->left; } if(sta.size()>0) { node tmp=sta.top(); sta.pop(); if(tmp.isfirst==false) { tmp.isfirst=true; sta.push(tmp); p=tmp.right; } else { ret.push_back(tmp.val); p=NULL; } } } return ret; }
题型二:非递归二叉序前序遍历(中序差不多,就不写了,自己去脑补去。。。。
vector<int> preorderTraversal(TreeNode *root) { // write your code here vector<int> ret; stack<TreeNode*> sta; TreeNode* p=root; while(sta.size()>0||p) { while(p) { sta.push(p); ret.push_back(p->val); p=p->left; } if(sta.size()) { TreeNode* tmp=sta.top(); sta.pop(); p=tmp->right; } } return ret; }
以上是关于二叉树-专题的主要内容,如果未能解决你的问题,请参考以下文章