现在的位置: 首页 > 综合 > 正文

第二十四题 求取树的深度

2018年04月13日 ⁄ 综合 ⁄ 共 1259字 ⁄ 字号 评论关闭

题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

例如:输入二元树:

                                            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;
}

抱歉!评论已关闭.