二叉树的非递归先序遍历
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,2,3]
.
Note: Recursive solution is trivial, could you do it iteratively?
___________________________________________________________________________________________________________________
基本思路:
从根结点root开始,一直向左子树遍历,在遍历过程中,将节点值依次输出(或者保存在vector中),并且将路径保存在一个栈stack中。遍历到最左节点后,就判断该节点是否有右子树。若有,就按照上述方法接着遍历该节点的右子树;若没有,则回退到有右子树的节点,进行遍历。 一直到stack为空,遍历遍历。
vector<int> preorderTraversal(TreeNode *root) { vector<int> result; TreeNode* cur = root; stack<TreeNode*> s; if(NULL==root){ return result; } while(cur!=NULL){ result.push_back(cur->val); s.push(cur); if(cur->left != NULL){ cur = cur->left; }else if(!s.empty()){ while(!s.empty()){ cur = s.top(); s.pop(); cur = cur->right; if(NULL!=cur){ break; } } }else{ cur = NULL; } } }