二叉树的叶子节点数和树的高度
问题:这两种操作都用到了递归,别人说递归好理解,我真的不觉得递归好理解,只是递归的代码看起来简单。
下面代码是求高度的另一种方法。递归计算高度是从底向上计算的,因此叶子节点高度为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; } |
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述