二叉树(4)----求二叉树深度,递归和非递归
来源:互联网 发布:rf仿真软件 编辑:程序博客网 时间:2024/06/13 10:22
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
(1)递归实现
如果根节点为NULL,则深度为0
如果根节点不为NULL,则深度=左右子树的深度的最大值+1
int GetBTreeDepth( BTreeNode_t *pRoot){ if( pRoot == NULL ) return 0; int lDepth = GetBTreeDepth( pRoot->m_pLeft); int rDepth = GetBTreeDepth( pRoot->m_pRight); return ((( lDepth > rDepth )? lDepth: rDepth) + 1 ); }
(2)非递归实现
借助队列,在进行按层遍历时,记录遍历的层数即可。
int GetBTreeDepth( BTreeNode_t *pRoot){ if( pRoot == NULL ) return 0; queue< BTreeNode_t *> que; que.push( pRoot ); int depth = 0; while( !que.empty() ){ ++depth; int curLevelNodesTotal = que.size(); int cnt = 0; while( cnt < curLevelNodesTotal ){ ++cnt; pRoot = que.front(); que.pop(); if( pRoot->m_pLeft ) que.push( pRoot->m_pLeft); if( pRoot->m_pRight) que.push( pRoot->m_pRight); } } return;}
0 0
- 二叉树(4)----求二叉树深度,递归和非递归
- 二叉树递归、非递归求深度
- 二叉树的遍历,递归和非递归,求深度
- 求二叉树深度 -- 递归和非递归实现
- 求二叉树深度的递归和非递归算法
- 二叉树非递归求深度
- 非递归求二叉树的深度
- 二叉树非递归求深度和节点个数
- 二叉树的深度(递归和非递归)
- 求二叉树的深度,递归与非递归算法
- 求二叉树的深度递归与非递归版
- 递归与非递归求二叉树深度
- 求二叉树的深度 递归 非递归
- 二叉树的基本操作(创建、递归和非递归遍历、求深度、求叶子数)
- 二叉树的深度,递归和非递归实现
- 求解二叉树的深度(递归和非递归)
- 求二叉树深度(递归方式)
- 二叉树的节点个数和深度(非递归)
- C指针编程之道 ---第八次笔记
- 203 最短摘要生成
- android shape的使用
- 高效C++ --经验条款(二)
- Boost练习1——时间和日期1
- 二叉树(4)----求二叉树深度,递归和非递归
- 第6章内核数据结构①链表
- jQuery autocomplete的使用(邮箱自动补全)
- VS.NET 各版本发布时提供的asp.net版本
- android studio 克隆git项目以及设置项目的全过程
- 高效C++ --经验条款(三)
- Android应用开发相关下载资源(2014/12/14更新)
- zz-am335x时钟clock寄存器配置141214d
- 杭电4970 Killing Monsters(数组标记)