二叉树的叶子节点数和树的高度
2013-04-30 16:16
375 查看
问题:这两种操作都用到了递归,别人说递归好理解,我真的不觉得递归好理解,只是递归的代码看起来简单。
下面代码是求高度的另一种方法。递归计算高度是从底向上计算的,因此叶子节点高度为0;
方法真的很巧妙。。。
比如getTreeHigh(a->lchild)返回的就是a的左子树的高度,getTreeHigh(a->lchild)返回的就是a的右子树的高度。
代码:
运行结果:
下面代码是求高度的另一种方法。递归计算高度是从底向上计算的,因此叶子节点高度为0;
方法真的很巧妙。。。
比如getTreeHigh(a->lchild)返回的就是a的左子树的高度,getTreeHigh(a->lchild)返回的就是a的右子树的高度。
int getTreeHigh(BinTree btree) { int depth; if(btree==NULL) depth=0; else { depthleft=getTreeHigh(btree->lchild); depthright=getTreeHigh(btree->rchild); depth=1+max(depthleft,depthright); } return depth; }
代码:
#include <iostream> #include <cstdlib> #include <stack> using namespace std; static int num=0; typedef struct btree { char data; struct btree *lchild; struct btree *rchild; }*BinTree; void CreateBinTree(BinTree &btree) { char c; cin>>c; if(c=='#') btree=NULL; else { btree=(BinTree)malloc(sizeof(struct btree)); btree->data=c; CreateBinTree(btree->lchild); CreateBinTree(btree->rchild); } } void showBTree(BinTree btree) { if(btree) { cout<<btree->data<<" "; showBTree(btree->lchild); showBTree(btree->rchild); } } int getTreeHigh(BinTree btree) { if(btree==NULL) return 0; if(btree->lchild&&btree->rchild) return max(getTreeHigh(btree->lchild)+1,getTreeHigh(btree->rchild)+1); if(btree->lchild) return getTreeHigh(btree->lchild)+1; if(btree->rchild) return getTreeHigh(btree->rchild)+1; return 1; } int getNumOfleaves(BinTree btree) { if(btree) { if(btree->lchild==NULL&&btree->rchild==NULL) num++; else { getNumOfleaves(btree->lchild); getNumOfleaves(btree->rchild); } } return num; } int main() { BinTree bt; int count; int h=0; cout<<"create bintree:"<<endl; CreateBinTree(bt); cout<<"output the bintree:"<<endl; showBTree(bt); cout<<endl; count=getNumOfleaves(bt); cout<<"叶子节点数为: "<<count<<endl; h=getTreeHigh(bt); cout<<"二叉树的高度为: "<<h<<endl; return 0; }
运行结果:
相关文章推荐
- 求二叉树的高度,宽度、节点个数、叶子节点个数
- 输出二叉树叶子节点、叶子节点数目、二叉树高度
- 二叉树求高度、叶子节点个数、总节点个数
- 求二叉树的前中后序递归、迭代,树的叶子节点,高度(c语言)
- Java二叉树的递归,非递归遍历,高度,节点数,叶子节点数
- 输出二叉树叶子节点、叶子节点数目、二叉树高度
- 求二叉树的叶子节点数目/二叉树的高度
- 求二叉树的高度,叶子节点个数,第K层结点个数,求祖先结点问题
- Java二叉树的递归,非递归遍历,高度,节点数,叶子节点数
- 计算二叉树的高度、节点数、叶子节点数
- 二叉树的各种操作的(递归非递归)的实现,如(递归非递归)先序后序中序层次遍历 二叉树的高度 叶子节点数,所有节点数
- java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)
- 二叉树的递归实现(前序,中序,后序,层序,高度,叶子节点数,第k层节点数)
- 二叉树的创建,遍历,求高度,算出节点数,算出叶子节点数,左右子树的交换,二叉树的销毁。
- 递归遍历 二叉树 求高度 和 节点数 和 叶子节点数
- 统计并保存叶子节点(二叉树)
- 第10周SHH数据结构-【项目3 -求二叉树b的叶子节点个数 . 】
- 二叉树第K层叶子节点个数 -- 采用递归和非递归方法实现
- 二叉树(8)----求二叉树第K层的节点数和二叉树第K层的叶子节点数,递归方式和非递归方式
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离