题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
例如:输入二元树:
10
/ \
6 14
/ / \
4 12 16
输出该树的深度3。
//求取树的深度 #include <iostream> using namespace std; struct treenode { treenode *m_left; treenode *m_right; int value; }; //定义一个平衡二叉树 void maketree(int value,treenode *&ptr) { if (ptr==nullptr) { treenode *m_currenttree=new treenode(); m_currenttree->value=value; m_currenttree->m_left=nullptr; m_currenttree->m_right=nullptr; ptr=m_currenttree; } else { if (value>ptr->value) { maketree(value,ptr->m_right); } if (value<ptr->value) { maketree(value,ptr->m_left); } } } //递归求取树中每个节点的深度值 int getDepth(treenode *ptr,int sum) { if (ptr==nullptr) { return 0; } int left=0; int right=0; //获取左子树的深度 if (ptr->m_left!=nullptr) { left=getDepth(ptr->m_left,left); } //获取右子树的深度 if (ptr->m_right!=nullptr) { right=getDepth(ptr->m_right,right); } //树的深度=左子树的深度和右子树深度中大的值+1 sum=(left>right)?(left+1):(right+1); return sum; } int main() { treenode *root=nullptr; maketree(12,root); maketree(5,root); maketree(6,root); maketree(11,root); maketree(9,root); maketree(14,root); maketree(8,root); int n=0; n=getDepth(root,n); cout<<n<<endl; }