二叉树的先序遍历-非递归实现
Posted simplepaul
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的先序遍历-非递归实现相关的知识,希望对你有一定的参考价值。
class Solution { public: void preorderTraversal(TreeNode* root) { //1.先逐个访问左路结点,并将其入栈 //2.再访问栈顶元素的右子树 stack<TreeNode*> helper; TreeNode* cur=root; //只有cur为空,并且栈空,说明所有元素访问完 while(cur || !helper.empty()) { while(cur){ // 左路结点入栈 cout << cur->val; helper.push(cur); cur=cur->left; } //来到这左路结点已入栈 TreeNode* right=helper.top()->right;//栈顶的右子树 helper.pop();//弹出栈顶 cur=right;//将右子树赋给cur上去继续判断(cur是当前结点的右子树,它是可能为空的,当它为空时,继续取下一个栈顶的右子树,否则要将其赋给cur,再次 //当做关键结点,即左路结点入栈,取栈顶,访问右子树...) } return; } };
以上是关于二叉树的先序遍历-非递归实现的主要内容,如果未能解决你的问题,请参考以下文章