非递归遍历二叉树
来源:互联网 发布:剧毒购买网络申报 编辑:程序博客网 时间:2024/05/01 23:51
使用栈辅助实现二叉树的非递归前序、中序和后序遍历
前序遍历:
遍历顺序:根->左子树->右子树
分析:先访问根,右子树入栈,然后访问左子树
void PreOrderNoRecursion(BinaryNode* bt){stack<BinaryNode*> s;BinaryNode* p = bt;while (p!=NULL || !s.empty()){if (p==NULL){p = s.top();s.pop();}cout<<p->data<<" ";if (p->rchild != NULL)s.push(p->rchild);p = p->lchild;}}
中序遍历:
遍历顺序:左子树->根->右子树
分析:将根入栈,先访问左子树,根出栈之后,访问根,然后访问右子树
void InOrderNoRecursion(BinaryNode* bt){stack<BinaryNode*> s;BinaryNode* p = bt;while(p!=NULL || !s.empty()){if (p!=NULL){s.push(p);p = p->lchild; } else {p = s.top();s.pop();cout<<p->data<<" ";p = p->rchild;}}}
后序遍历:
遍历顺序:左子树->根->右子树
分析:先将根入栈,访问左子树,然后根出栈,如果没有访问右子树,则将根入栈先访问右子树,否则访问根,然后向上继续。此处使用一个pre指针判断是否已访问右子树,根据后序遍历的顺序,一个节点的前驱节点是其右子树的根节点,如果pre指向其右子树根节点,则其右子树已访问,否则未访问。
void PostOrderNoRecursion(BinaryNode* bt){stack<BinaryNode*> s;BinaryNode* p = bt;BinaryNode* pre = NULL;while (p!=NULL || !s.empty()){if (p!=NULL){s.push(p);p = p->lchild;} else {p = s.top();if (p->rchild!=NULL && p->rchild!=pre){//右子树不为空并且右子树未访问p = p->rchild;} else {s.pop();cout<<p->data<<" ";pre = p;p = NULL;//将p置为空,以便下次从堆栈中弹出下一个节点}}}}
- 非递归遍历二叉树
- 二叉树遍历非递归
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树遍历--非递归
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- java中导入导出Excel表格(jxl的API应用)
- 2013年的目标
- havlenapetr大牛的工程,是可以直接编译过的
- 正则表达式之--贪婪与非贪婪模式详解
- jsp+javaBean简单计算器
- 非递归遍历二叉树
- Socket 阻塞与非阻塞模式
- yii框架在layout模式下,模版和layout文件的渲染顺序
- 微信公众平台再熟悉
- silverlight自定义用户控件,实现下拉多选功能
- struts-1.3.8、spring2.5.6、hibernate3整合
- 拉电流(source current)与灌电流(sink current)
- 设计模式的完结篇
- GroupTableView