-
题目描述:
-
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
-
输入:
-
第一行输入有n,n表示结点数,结点号从1到n。根结点为1。 n <= 10。
接下来有n行,每行有两个个整型a和b,表示第i个节点的左右孩子孩子。a为左孩子,b为右孩子。当a为-1时,没有左孩子。当b为-1时,没有右孩子。
-
输出:
-
输出一个整型,表示树的深度。
-
样例输入:
-
32 3-1 -1-1 -1
-
样例输出:
-
2
Key:不需要考虑构造标准的链式结构,以id定位到父节点很麻烦,使用顺序存储结构直接通过id串联,有点类似静态链表;
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <vector> using namespace std; struct TreeNode { int id; int leftChildId; int rightChildId; }; TreeNode treeInfo[11]; int Height(int rootPos,int nodeNum) { if(rootPos>nodeNum)//error return -1; if(rootPos==-1) return 0; int lHeight = Height(treeInfo[rootPos].leftChildId,nodeNum); int rHeight = Height(treeInfo[rootPos].rightChildId,nodeNum); int maxSubTreeHeight = (lHeight>rHeight)?lHeight:rHeight; return maxSubTreeHeight+1; } int main() { //freopen("in.txt","r",stdin); int n; while(cin>>n) { for(int i=1; i<=n; i++) { treeInfo[i].id=i; cin>>treeInfo[i].leftChildId>>treeInfo[i].rightChildId; } cout<<Height(1,n)<<endl; } return 0; }