给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回它的最大深度 3 。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int maxDepth(struct TreeNode* root) {
int hl,hr,maxh;
if(root){
hl=maxDepth(root->left);
hr=maxDepth(root->right);
maxh=hl>hr?hl:hr;
return (maxh+1);//返回树的深度
}
else
return 0;//空树深度
}
完整呈现:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct TreeNode *BinTree;
//typedef BinTree Position;
struct TreeNode{
int data;
BinTree left;
BinTree right;
};
BinTree createTreeNode(int data);
int PostOrderGetHeight( BinTree BT );
int main()
{
BinTree bt1,bt2,bt3,bt4,bt5,bt6;
bt1=createTreeNode(1);
bt2=createTreeNode(2);
bt3=createTreeNode(3);
bt4=createTreeNode(4);
bt5=createTreeNode(5);
bt6=createTreeNode(6);
bt1->left=bt2;
bt1->right=bt3;
bt2->left=bt4;
bt2->right=bt5;
//bt3->left=NULL;
bt3->right=bt6;
int len;
len=PostOrderGetHeight(bt1);
printf("树的深度:%d\n",len);
return 0;
}
BinTree createTreeNode(int data)
{
BinTree n=(BinTree)malloc(sizeof(struct TreeNode));
n->data = data;
n->left = NULL;
n->right = NULL;
return n;
}
int PostOrderGetHeight( BinTree BT )
{ int HL, HR, MaxH;
if( BT ) {
HL = PostOrderGetHeight(BT->left); /*求左子树的深度*/
HR = PostOrderGetHeight(BT->right); /*求右子树的深度*/
MaxH = HL > HR? HL : HR; /*取左右子树较大的深度*/
return ( MaxH + 1 ); /*返回树的深度*/
}
else return 0; /* 空树深度为0 */
}