二叉树的遍历
来源:互联网 发布:linux c语言创建目录 编辑:程序博客网 时间:2024/04/26 07:57
二叉树节点的定义:
中序遍历:
后序遍历:
后序遍历的非递归实现稍微需要仔细推敲一下,但是理解了也很简单。
struct treeT{ ElemType key; struct treeT* left; struct treeT* right;}*pTreeT
递归实现:
先序遍历:
void BT_PreOrder(pTreeT root){ if (NULL != root) { visit(root); BT_PreOrder(root->left); BT_PreOrder(root->right); } }
中序遍历:
void BT_InOrder(pTreeT root){ if (NULL != root) { BT_InOrder(root->left); visit(root); BT_InOrder(root->right); }}
后序遍历:
void BT_PostOrder(pTreeT root){ if (NULL != root) { BT_PostOrder(root->left); BT_PostOrder(root->right); visit(root); }}
在非递归实现中,都是用到栈结果来保存。
void BT_PreOrderNoRec(pTreeT root){ stack<treeT *> s; while ((NULL != root) || !s.empty()) { if (NULL != root) { visit(root); s.push(root); root = root->left; } else { root = s.top(); s.pop(); root = root->right; } }}void BT_InOrderNoRec(pTreeT root){ stack<treeT *> s; while ((NULL != root) || !s.empty()) { if (NULL != root) { s.push(root); root = root->left; } else { root = s.top(); visit(root); s.pop(); root = root->right; } }}
后序遍历的非递归实现稍微需要仔细推敲一下,但是理解了也很简单。
基本思想是:先找到最左边的叶子并把路上遇到的节点依次压栈,然后弹出栈顶的元素(该元素为最左边的叶子),并判断(1)它有没有右节点;(2)右节点是否被访问过。如果(1)为有右节点同时(2)为没有访问过,则先压入刚才弹出的元素,然后再压入它的右子树。否则,就访问该节点,并设置pre为该节点。
void BT_PostOrderNoRec(pTreeT root){ stack<treeT *> s; pTreeT pre=NULL;//pre记录的是前一个被访问的节点 while ((NULL != root) || !s.empty()) { if (NULL != root) { s.push(root); root = root->left; } else { root = s.top(); if (root->right!=NULL && pre!=root->right) { root=root->right; } else { root=pre=s.top(); visit(root); s.pop(); root=NULL; } } }}
二叉树的层序遍历使用队列实现:
void BT_LevelOrder(pTreeT root){ queue<treeT *> q; treeT *treePtr; assert( NULL != root ); q.push(root); while (!q.empty()) { treePtr = q.front(); q.pop(); visit(treePtr); if (NULL != treePtr->left) { q.push(treePtr->left); } if (NULL != treePtr->right) { q.push(treePtr->right); } }}
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- FVWM简明使用指南
- CSS3实现GIF进度条
- android 手机拍照获得 缩略图 或者 获得原图
- 亚马逊发布GameCircle 欲与苹果Game Center争高下
- 10g以来,我们有什么理由不选择 数据泵 呢?
- 二叉树的遍历
- 怎样把内网IP映射外网
- Study《Java中abstract与interface理解》
- Beagle都是從這裡發生的
- 三大WEB服务器对比分析(apache ,lighttpd,nginx)
- 打造windows平台下的PHP开发环境
- jdk的配置
- TOAD 常用快捷键
- 设计模式的思考