题目描述
给定一个二叉树,找出其最大深度。
最大深度是从根节点到最远叶子节点的最长路径上的节点数量。
输入
输入一行,按照先序输入一棵二叉树,其中空节点用 -1 表示。
输出
输出一行代表二叉树的最大深度。
样例输入
1 2 -1 -1 3 4 -1 -1 -1
样例输出
3
//1369:二叉树的最大深度
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct BiNode{
int data;
struct BiNode *lchild;
struct BiNode *rchild;
}*BiTree;
void CreateTree(BiTree &T){
//按照先序序列创建一棵二叉树
int data;
scanf("%d",&data);
if(cin.get()!='\n'){
if(data==-1){
T=NULL;
}else{
T=(BiTree)malloc(sizeof(BiNode));
T->data=data;
CreateTree(T->lchild);
CreateTree(T->rchild);
}
}
}
// 通过后序递归遍历二叉树T求二叉树高度:LRN
int HeithByPostOrder(BiTree T){
if(T==NULL) return 0; // 空树
int lh=HeithByPostOrder(T->lchild); // 递归访问左子树
int rh=HeithByPostOrder(T->rchild); // 递归访问右子树
return (lh>rh?lh:rh) + 1; // 自己的高度等于子树中最大高度加1
}
int main(void){
BiTree T;
CreateTree(T);
printf("%d",HeithByPostOrder(T));
return 0;
}