16黑马笔记之二叉树的递归遍历求树的深度

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;
}
发布了54 篇原创文章 · 获赞 1 · 访问量 700

猜你喜欢

转载自blog.csdn.net/weixin_44517656/article/details/105597322