题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
直接遍历所有节点就行~代码如下
//二元树的深度
#include<iostream>
using namespace std;
struct treenode{
int data;
treenode *l;
treenode *r;
};
void create(treenode *&t){ //建树
t->data=10;
t->l=new treenode();
t->l->data=6;
t->l->l=new treenode();
t->l->l->data=4;
t->l->l->l=NULL;
t->l->l->r=NULL;
t->l->r=new treenode();
t->l->r->data=8;
t->l->r->l=NULL;
t->l->r->r=NULL;
t->r=new treenode();
t->r->data=14;
t->r->l=new treenode();
t->r->l->data=12;
t->r->l->l=NULL;
t->r->l->r=NULL;
t->r->r=new treenode();
t->r->r->data=16;
t->r->r->l=NULL;
t->r->r->r=NULL;
}
void find_depth(treenode *tree,int depth,int &max){
if(!tree->l&&!tree->r&&max<depth) max=depth;
else if(tree->l) find_depth(tree->l,++depth,max);
else find_depth(tree->r,++depth,max);
}
int main(void){
int max=-1;
treenode *tree=new treenode;
create(tree);
find_depth(tree,1,max);
cout<<max<<endl;
return 0;
}