标签:二叉树
题目描述
借鉴了许多代码,最后优deepth()化到最简已经,思路就是遍历每个节点,空节点为-1,最终的结果肯定是某个节点左子树的深度加上右子树的深度加2,所以求出每个节点左子树和右子树的深度,取左右子树深度之和加2的最大值即可。
Code:
#include<bits/stdc++.h> using namespace std; typedef struct BTree { char data; struct BTree *left,*right; }BTree; BTree *CreatBTree() { char ch=getchar(); if(ch==' ') return NULL; BTree *temp=(BTree *)malloc(sizeof(BTree)); temp->data=ch; temp->left=CreatBTree(); temp->right=CreatBTree(); return temp; } int deepth(BTree *T,int &maxDis) { if(!T) return -1; int L=deepth(T->left,maxDis); int R=deepth(T->right,maxDis); maxDis=max(maxDis,L+R+2); return max(L,R)+1; } void delBTree(BTree *p) { if(p) { delBTree(p->left); delBTree(p->right); free(p); } } int main() { int t; cin>>t; while(t--) { getchar();//吃掉回车 int maxDis=-1; BTree *root=CreatBTree(); getchar();//吃掉最后结尾的空格 deepth(root,maxDis); cout<<maxDis<<endl; delBTree(root); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:二叉树
原文地址:http://blog.csdn.net/a120705230/article/details/46995925