#include <stdlib.h>
#include <stdio.h>
//ABC##DE#G##F###输入的前序序列
struct Node{
char data;
struct Node *lchild,*rchild;
};
//种树
struct Node* createBitree(){
char ch;
struct Node *t;
scanf("%c",&ch);
if(ch=='#') {
t = NULL;
}else{
if(!(t = (struct Node*)malloc(sizeof(struct Node))))
exit(-1);
t->data = ch;
t->lchild=createBitree();
t->rchild=createBitree();
}
return t;
}
//caculate binary tree's depth recursively递归算法
/*void depth(struct Node *t,int i,int *h){
if(t!=NULL){
i++;
if(i>*h){
*h = i;//h变量表示树的深度不断更新,i代表各个子树的深度
}
depth(t->lchild,i,h);
depth(t->rchild,i,h);
}
}*/
int BiTreeDepth(struct Node* node){
int top = 0, depth = 0, temp = 0;
struct Node s[100];
//node所指向树不空或栈不空
while (node!=NULL||top!=0){
while (node!= NULL){
s[top++] = *node;//左子树所遇结点node进栈
temp++;//统计单分支的深度
node = node->lchild;//继续搜索node的左子树
}
if (top>0){
node = &s[--top];//出栈,栈顶元素赋给node
node = node->rchild;//继续搜索node的右子树
if (node == NULL){
if (temp > depth)depth = temp;
--temp;//返回到上面一层,所以需要减一
}
}
}
return depth;
}
int main(){
struct Node* node;
int i=0,h=0;
int depth;
node = createBitree();
//depth(node, i, &h);递归方法求出树的深度
depth = BiTreeDepth(node);//非递归方法求树的深度
printf("树的深度是%d\n",depth);
}
求二叉树的深度(非递归和递归)C语言版
最新推荐文章于 2024-01-06 21:32:05 发布