/法1:后序遍历,结点最大栈长即为树的高度 //法2:层次遍历,层次即为高度 //法3:递归求树高 //输入:-+a##*b##-c##d##/e##f## //输出:5 #include<iostream> #include<stack> #include<queue> using namespace std; typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void CreateTree(BiTree &T) { char ch; cin>>ch; if(ch=='#') T=NULL; else { T=(BiTree)malloc(sizeof(BiTNode)); if(!T) cout<<"生成结点错误!"<<endl; T->data=ch; CreateTree(T->lchild); CreateTree(T->rchild); } } //法1:后序遍历,结点最大栈长即为树的高度 int BT_high(BiTree T) { BiTree p=T,r=NULL; int max=0; //树高 stack<BiTree> s; while(p||!s.empty()) { if(p!=NULL) { s.push(p); p=p->lchild; } else { p=s.top(); if(p->rchild!=NULL && p->rchild!=r) p=p->rchild; else { if(s.size()>max) max=s.size();//最大层次即为高度 r=p; s.pop(); p=NULL; } } } return max; } //法2:层次遍历,层次即为高度 int BT_level_depth(BiTree T) { if(!T) return 0; BiTree p=T,Q[100]; int front=-1,rear=-1,last=0,level=0; Q[++rear]=p; while(front<rear) { p=Q[++front]; if(p->lchild) Q[++rear]=p->lchild; if(p->rchild) Q[++rear]=p->rchild; if(front==last) { last=rear; level++; //层次+1 } } return level; } //法3:递归求树高1 int max1=0;//树高 int BT_depth1(BiTree T,int depth) { if(T) { if(T->lchild) BT_depth1(T->lchild,depth+1); if(T->rchild) BT_depth1(T->rchild,depth+1); } if(depth>max1) max1=depth; return depth; } //法3:递归求树高2 int Height (BiTree T) { if(T==NULL) return 0; else { int m = Height ( T->lchild ); int n = Height(T->rchild); return (m > n) ? (m+1) : (n+1); } } int main() { BiTree T=NULL; CreateTree(T); cout<<"后序遍历求树高:"<<endl; cout<<BT_high(T)<<endl; cout<<"层次遍历求树高:"<<endl; cout<<BT_level_depth(T)<<endl; cout<<"递归求树高1:"<<endl; BT_depth1(T,1); cout<<max1<<endl; cout<<"递归求树高2:"<<endl; cout<<Height(T)<<endl; return 0; }
二叉树求树的高度
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】二叉树的存储结构
【数据结构】第五章——树与二叉树详细介绍二叉树的存储结构……
二叉树 数据结构 C语言 -
【二叉树】最小高度树
题目给定一个 有序 整数数组元素各不相同且按 升序 排列编写一个算法,创建一棵 高度最小 的二叉 搜索 树给定有序数组:
算法 深度优先 swift ios objective-c -
二叉树的直径【二叉树】
时间复杂度:空间复杂度:
python 复杂度 Code 二叉树 -
java二叉树的高度算法 java 二叉树
二叉树的基本定义简而言之:二叉树就是度不能超过2的树(每个树只能有两个节点)
java二叉树的高度算法 java 面试 经验分享 后端 -
Java二叉树最高的高度 java中二叉树
1、背景二叉树算法,相信大家都不陌生,学习,面试,工作中我们都会遇到它,其实二叉树在IT领域应用是非常广泛的,它不仅在游戏开发中,在当前比较火的人工智能上也得到了广泛的应用。下面就java实现二叉树算法进行实现。2、遍历二叉树几种方式遍历二叉树有三种方式,分别是: 1.先序遍历(根->左->右), 2.中序遍历(左->根->右), 3.后序遍历(左->右->根)
Java二叉树最高的高度 二叉树 二叉树算法 二叉树算法多种实现方式 二叉树算法多种实现方式-java -
求二叉树最大距离java 求二叉树的高度java
概述 遍历二叉树在上一篇文章中已经讲过了,那如何求一颗二叉树的高度呢?这一讲就讲这个问题。
求二叉树最大距离java 二叉树 System 迭代