二叉树的非递归遍历
来源:互联网 发布:修改服务器端口 编辑:程序博客网 时间:2024/04/30 00:51
在实际应用中,二叉树的遍历一般都采用递归形式,简洁、直观。
但在笔试、面试中却很喜欢考察非递归形式的写法,下面将二叉树的非递归遍历实现总结如下:
节点定义:
struct Node{int val;Node *left, *right;};
1)中序遍历
实现I
void InOrderTraverse(Node *root){stack<Node*> st;st.push(root);while(!st.empty()){while(st.top() != NULL)st.push(st.top()->left);st.pop();if(!st.empty()){Node *head = st.top();printf("%d ", head->val);st.pop();st.push(head->right);}}printf("\n");}实现II:
void InOrderTraverse2(Node *root){stack<Node*> st;Node *p = root;while(p || !st.empty()){if(p){st.push(p);p = p->left;}else{printf("%d ", st.top()->val);p = st.top()->right;st.pop();}}printf("\n");}两种实现本质是一样的,区别仅在在空指针的判断和存放上。
2)先序遍历
实现I:
void PreOrderTraverse(Node *root){stack<Node*> st;Node *p = root;while(p || !st.empty()){if(p){printf("%d ", p->val);st.push(p);p = p->left;}else{p = st.top()->right;st.pop();}}printf("\n");}
实现II:
void PreOrderTraverse2(Node *root){stack<Node*> st;Node *p = root;while(p || !st.empty()){if(p == NULL){p = st.top();st.pop();}printf("%d ", p->val);if(p->right)st.push(p->right);p = p->left;}printf("\n");}
void PostOrderTraverse(Node *root){stack<Node*> st;if(root != NULL)st.push(root);Node *pre = NULL;while(!st.empty()){Node *head = st.top();if((head->left == NULL && head->right == NULL)|| (pre != NULL && (pre == head->right || pre == head->left ))){printf("%d ", head->val);pre = head;st.pop();}else{if(head->right != NULL)st.push(head->right);if(head->left != NULL)st.push(head->left);}}printf("\n");}后续遍历的实现,参照了了博文“二叉树的非递归遍历”
- 二叉树的递归,非递归遍历
- 二叉树的递归+非递归遍历
- 二叉树的递归非递归遍历
- 二叉树的遍历--递归+非递归
- 二叉树的递归、非递归遍历
- 二叉树的递归非递归遍历
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的创建,递归遍历,非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的非递归遍历以及递归遍历
- 二叉树的非递归遍历&递归遍历
- 二叉树的递归遍历和非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历和非递归遍历
- 二叉树的构造,递归遍历,非递归遍历
- 二叉树的遍历(递归+非递归+层次遍历)
- 二叉树的递归遍历与非递归遍历
- 线索二叉树简介
- c# 如何获取项目的根目录
- 如何将光盘制作为iso文件
- libpomelo+cocos2d-x开发环境筹建(windows版)
- Java导出word
- 二叉树的非递归遍历
- 用脚本寻找ubuntu最快的源
- 游戏服务器框架pomelo
- 【实用技术】Notepad++之TextFX插件的常用命令
- 函数适配器
- SQL读书笔记(1)--数据定义和创建
- Android weather 小应用
- hdu(4720) Naive and Silly Muggles
- hdu2067小兔的棋盘--卡特兰数