C++算法之 求二叉树的节点个数、深度、四种遍历方法
2015-01-04 11:42
417 查看
//节点的数据结构 class BTree { public: int m_nValue; BTree* m_nLeft; BTree* m_nRight; public: BTree(int value) { m_nValue = value; } };
一:求二叉树的节点个数:
/* 求二叉数中的节点个数 递归解法: 1:如果二叉树为空,节点的个数为0 2:如果二叉树不为空,二叉树节点的个数 = 左子树节点个数+右子树节点的个数+1; */ int GetNodeCount(BTree* pRoot) { if (pRoot == NULL) return 0; int LeftNum = GetNodeCount(pRoot->m_nLeft); int RightNum = GetNodeCount(pRoot->m_nRight); int ret = LeftNum+RightNum+1; return ret; }
二:求二叉树的深度:
/* 求二叉树的深度 递归解法: 1:如果二叉树为空,则二叉树的深度为0 2:如果二叉树不为空,二叉树的深度 = MAX(左子数深度,右子树深度)+1; */ int GetTreeDepth(BTree* pRoot) { if (pRoot == NULL) return 0; int LeftDepth = GetTreeDepth(pRoot->m_nLeft); int RightDepth = GetTreeDepth(pRoot->m_nRight); int ret = max(LeftDepth,RightDepth)+1; return ret; }
三:四种遍历方式:
/* 前序遍历: 1:如果二叉树为空,空操作 2:如果二叉树不为空,访问根节点,前序遍历左子树,前序遍历右子树 */ void PreOrderTraverse(BTree* pRoot) { if (pRoot == NULL) return; cout<<pRoot->m_nValue<<endl; PreOrderTraverse(pRoot->m_nLeft); PreOrderTraverse(pRoot->m_nRight); } /* 中序遍历: 1:如果二叉树为空,空操作 2:如果二叉树不为空,第一步中序遍历左字树,第二步访问跟节点,第三步中序遍历右子树 */ void InOrderTraverse(BTree* pRoot) { if (pRoot == NULL) return; InOrderTraverse(pRoot->m_nLeft); cout<<pRoot->m_nValue<<endl; InOrderTraverse(pRoot->m_nRight); } /* 后序遍历: 1:如果二叉树为空,空操作 2:如果二叉树不为空,第一步后序遍历左子树,第二步后序遍历右子树,第三步访问跟节点; */ void BackOrderTraverse(BTree* pRoot) { if (pRoot == NULL) return; BackOrderTraverse(pRoot->m_nLeft); BackOrderTraverse(pRoot->m_nRight); cout<<pRoot->m_nValue<<endl; } /* 分层遍历二叉树(按层次从上到下,从左往右) 相当于广度优先搜素,使用队列实现。 队列初始化,将跟节点压入队列。 当队列不为空:弹出一个节点,访问,若左子树节点或者右子树节点不为空,将其压入队列! */ void LevelTraverse(BTree* pRoot) { if (pRoot == NULL) return; queue<BTree*> q; q.push(pRoot); while (!q.empty()) { BTree* pNode = q.front(); q.pop(); cout<<pNode->m_nValue<<endl;//访问节点 if(pNode->m_nLeft != NULL) q.push(pNode->m_nLeft); if (pNode->m_nRight != NULL) q.push(pNode->m_nRight); } }
相关文章推荐
- C++算法之 求二叉树的节点个数、深度、四种遍历方法
- 二叉树叶子节点遍历---递归与非递归方法求取树深度
- 【数据结构】二叉树的实现(如:默认成员函数、(叶子)节点数、深度、四种遍历)
- 二叉树四种遍历方式总结及解剖及求深度节点数及宽度
- 【数据结构】二叉树的实现(如:默认成员函数、(叶子)节点数、深度、四种遍历)
- 二叉树的创建,遍历,叶节点数,总结点数,深度
- 二叉树的创建、遍历、深度、叶子节点数
- 非递归层次遍历方法实现二叉树中指定节点的层次数查找
- 二叉树的先序建立、遍历、镜像、节点数、深度的具体代码实现
- 二叉树的各种操作 先序 中序 后续 层次 遍历 求树高度 节点深度 知先序中序求后续 二叉排序树
- C++之二叉树的创建、查找、四种次序的周游遍历方法以及内存的释放
- 二叉树的先序 中序 后序 层次遍历 求叶节点个数、深度、最大元、最小元
- 二叉树的插入,递归遍历和深度节点数
- 数据结构:题目(4)遍历二叉树的四种方法: 依次是:层次、前序、中序、后序
- 二叉树的遍历与深度和节点数的计算代码实现
- 二叉树的的所有操作——转化为静态二叉链表,求深度,求先序排列,求中序排列,求后序排列,求层次遍历,求度为0.1.2的节点个数
- 八.二叉树各种操作的C语言实现 深度遍历求深度,广度遍历求深度,交换左右子树,求叶子节点数
- 二叉树 遍历|统计叶子节点|求深度|交换左右子树|查找是否存在某个特定叶子节点练习题
- 基本数据结构——二叉树的建立,遍历,求叶子节点,深度计算
- 二叉树的前、中、后序遍历(递归和非递归)、层序遍历、深度、叶子节点个数