二叉树(1)----先序遍历(前序遍历),递归和非递归方式实现
来源:互联网 发布:加强个人网络安全意识 编辑:程序博客网 时间:2024/05/06 19:18
1、二叉树节点定义
typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight;} BTreeNode_t;
2、前序遍历
定义: 先访问根节点,在访问左子树,最后访问右子树;
(1)递归实现
如果根节点为NULL,返回。
如果根节点不为NULL, 则先访问根节点,然后再访问左子树,最后访问右子树
void PreorderTraverse( BTreeNode_t *pRoot){ if( pRoot == NULL ) return ; Visit( pRoot); PreorderTraverse( pRoot->m_pLeft ); PreorderTraverse( pRoot->m_pRight); return;}
(2)非递归实现
借助STL的栈实现
第一步: 首先判断pRoot是否为空,若不为空,则进行第二步;若为空,则进行第三步。
第二步:访问pRoot,然后将pRoot入栈,将pRoot左结点赋给pRoot,然后对新pRoot进行第一步。
第三步:判断栈是否为空,如果不为空,则取出栈顶元素,并出栈,然后将栈顶元素的右结点赋给pRoot,然后进行第一步;如果pRoot为NULL并且栈空,则结束。
void PreorderTraverse( BTreeNode_t *pRoot){ if( pRoot == NULL ) return ; stack <BTreeNode_t *> st; while( pRoot != NULL || !st.empty() ){ while( pRoot != NULL ){ Visit( pRoot ); st.push( pRoot ); pRoot = pRoot->m_pLeft; } if( !st.empty() ){ pRoot = st.top(); st.pop(); pRoot = pRoot->m_pRight; } } return;}
0 0
- 二叉树(1)----先序遍历(前序遍历),递归和非递归方式实现
- 二叉树遍历算法(递归实现先序中序和后续遍历)(非递归实现中序和先续)
- 二叉树之先序遍历(递归和非递归两种遍历)
- 以二叉树的前序遍历为例,递归和非递归方式的实现
- 二叉树的前序遍历(递归+非递归)
- 二叉树2:层次遍历方式及先序、中序、后序(递归与非递归)遍历方式
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 算法:二叉树的先序遍历、中序遍历、后序遍历(递归及非递归方式)的java代码实现
- 二叉树的非递归遍历方式(前序、中序和后序)
- 二叉树的遍历C实现(非递归)—先序遍历
- 二叉树的先序遍历(非递归算法)
- 二叉树非递归和递归遍历(先序,中序,后序)
- 非递归先序遍历二叉树
- 非递归先序遍历二叉树
- 先序遍历二叉树 [非递归]
- 非递归先序遍历二叉树
- 二叉树非递归先序遍历
- 二叉树非递归先序遍历
- C#:System.Data.SQLite数据库介绍
- 解决mysql“Access denied for user 'root'@'localhost'”
- 手把手用 swift制作天气预报(预报不怎么准)
- 机器人问题(icpc)还有问题,调试中
- 三个女儿的年龄
- 二叉树(1)----先序遍历(前序遍历),递归和非递归方式实现
- Android之平滑listview
- PyCUDA的Windows开发环境搭建
- 逻辑题
- HDOJ 5145 NPY and girls
- js编码和解码
- NS3 中 ObjectBase类学习
- Linux (or ubuntu) 下改变分区大小、添加新分区办法
- 打开窗口、关闭窗口