16黑马笔记之二叉树的递归遍历求树的深度
1 思想: 对每一个节点求出其左右孩子的深度并返回用变量接收,然后取其最大值即可,最后返回的就是二叉树的深度。
2 代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义二叉树节点
typedef struct BINARYNODE{
char ch;
struct BINARYNODE *lchild;
struct BINARYNODE *rchild;
}BinaryNode;
//求二叉树深度
int BinaryDepth(BinaryNode *root){
//递归的条件
if(root==NULL){
return 0;
}
//求深度思想:看遍历左右子树,比较左右子树的返回次数,看谁多,取多的次数为每次比较的深度
int depth=0;
int depth1=BinaryDepth(root->lchild);
int depth2=BinaryDepth(root->rchild);
//比较返回的深度,取返回次数多的深度
depth=depth1>depth2?depth1+1:depth2+1; //因为结束时返回0,所以要加1表示返回次数
return depth;
}
void CreateBinartTree(){
//创建数据节点
BinaryNode node1={'A',NULL,NULL};
BinaryNode node2={'B',NULL,NULL};
BinaryNode node3={'C',NULL,NULL};
BinaryNode node4={'D',NULL,NULL};
BinaryNode node5={'E',NULL,NULL};
BinaryNode node6={'F',NULL,NULL};
BinaryNode node7={'G',NULL,NULL};
BinaryNode node8={'H',NULL,NULL};
//建立节点关系 A-F-G-H
// \B
// \C-E
// \D
node1.lchild=&node2;
node1.rchild=&node6;
node2.rchild=&node3;
node3.lchild=&node4;
node3.rchild=&node5;
node6.rchild=&node7;
node7.rchild=&node8;
//递归遍历
int depth=BinaryDepth(&node1);
printf("二叉树的深度为:%d\n",depth);
}
int main(){
CreateBinartTree();
return 0;
}