二叉树遍历方式总结
来源:互联网 发布:sem和seo区别 编辑:程序博客网 时间:2024/06/16 04:48
经过几次面试发现,二叉树经常在面试中被问到,而二叉树的遍历方式又是经常被考到的,所以对二叉树的遍历方式进行一下总结:
首先说一下几种常见的遍历方式,即经常使用的也是非常容易写的递归的遍历方式:
前序遍历的递归写法:
void preorder(TreeNode *root){ if(root!=NULL) { printf("%d\n",root->value); preorder(root->left); preorder(root->right); }}
中序遍历的递归写法:
void inorder(TreeNode *root){ if(root!=NULL) { inorder(root->left); printf("%d\n",root->value); inorder(root->right); }}
后续遍历的递归写法:
void postorder(TreeNode *root){ if(root!=NULL) { postorder(root->left); postorder(root->right); printf("%d\n",root->value); }}
下面是三种遍历方式的非递归方式:
前序遍历的非递归写法:
void preorder(TreeNode *root){ stack<TreeNode *> s; TreeNode *p=root; while(p!=NULL || !s.empty()) { while(p) { push(p); printf("%d\n",p->value); p=p->left; } s.pop(); p=s.top();}
中序遍历的非递归写法:
void inorder(TreeNode *root){ stack<TreeNode *> s; TreeNode *p=root; while(p!=NULL||!s.empty()) { while(p) { push(p); p=p->left; } p=s.top(); printf("%d\n",p->value); s.pop(); p=p->right; }}
后序遍历的非递归写法(此段代码为引用):
void postorderTraversal(TreeNode *root, vector<int> &path){ stack<TempNode *> s; TreeNode *p = root; TempNode *temp; while(p != NULL || !s.empty()) { while(p != NULL) //沿左子树一直往下搜索,直至出现没有左子树的结点 { TreeNode *tempNode = new TreeNode; tempNode->btnode = p; tempNode->isFirst = true; s.push(tempNode); p = p->left; } if(!s.empty()) { temp = s.top(); s.pop(); if(temp->isFirst == true) //表示是第一次出现在栈顶 { temp->isFirst = false; s.push(temp); p = temp->btnode->right; } else //第二次出现在栈顶 { path.push_back(temp->btnode->val); p = NULL; } } }}还有一种经常考的是层次遍历:
void layerorder(TreeNode*root){ queue <TreeNode*>q; TreeNode *p=root; q.enqueue(p); while(q!=NULL) { p=q.delqueue(); if(p->left!=NULL) q.enqueue(p->left); if(p->left!=NULL) q.enqueue(p->left); }}
0 0
- 二叉树遍历方式总结
- 二叉树的遍历方式总结
- 二叉树遍历方式
- 二叉树遍历方式
- 二叉树的三种遍历方式总结
- 二叉树遍历总结
- 二叉树的遍历方式
- 二叉树的遍历方式
- 二叉树 遍历 算法总结
- 二叉树遍历 推倒总结
- 二叉树遍历 推导总结
- 二叉树遍历方法总结
- 二叉树总结创建,遍历
- 二叉树遍历算法总结
- 二叉树遍历算法总结
- 二叉树的遍历总结
- 数据结构总结 & 二叉树遍历
- 数据结构-二叉树遍历总结
- HashMap实现原理分析
- Oracle 在Spring+Hibernate中的使用
- HDU 2063 过山车(第一发二分匹配)
- java集合11--HashTable源码详解
- poj2159Ancient Cipher
- 二叉树遍历方式总结
- Markdown 低频语法手册
- 解决一下华为手机选取相册照片,选取不到问题。
- 内存管理 ---slab机制 分配对象
- Android 导入第三方jar包
- 设计模式(6)--策略模式
- ZOJ-3868-GCD Expectation(容斥)
- Jquery Ajax 跨域调用asmx类型 WebService范例
- Android Gradle Plugin指南(一)——简介