剑指Offer----面试题39(1):二叉树的深度

题目:

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


分析


如果一颗树只有一个根结点,那么该树的深度为1。如果该树只有左子树没有右子树,那么该树的深度应该是左子树的深度加1;同理,如果该树只有右子树而没有左子树,那么该树的深度应该是右子树的深度加1。如果该树既有左子树又有右子树,那么该树的深度应该是左子树和右子树深度的最大值加1。

代码:
#include"BinaryTree.h"
#include

using namespace std;
using namespace OrdinaryBinaryTreeSpace5;

int TreeDepth(BinaryTreeNode *root)
{
	if (root == nullptr)
		return 0;
	
	int left = TreeDepth(root->left);
	int right = TreeDepth(root->right);

	return (left > right) ? (left + 1) : (right + 1);
}

/*
					1
				   / \
				  2   3
				 / \   \
				4   5   6
				   /
				  7
*/
void test1()
{
	BinaryTreeNode *node1 = CreateBinaryTreeNode(1);
	BinaryTreeNode *node2 = CreateBinaryTreeNode(2);
	BinaryTreeNode *node3 = CreateBinaryTreeNode(3);
	BinaryTreeNode *node4 = CreateBinaryTreeNode(4);
	BinaryTreeNode *node5 = CreateBinaryTreeNode(5);
	BinaryTreeNode *node6 = CreateBinaryTreeNode(6);
	BinaryTreeNode *node7 = CreateBinaryTreeNode(7);

	ConnectBinaryTreeNodes(node1, node2, node3);
	ConnectBinaryTreeNodes(node2, node4, node5);
	ConnectBinaryTreeNodes(node3, NULL, node6);
	ConnectBinaryTreeNodes(node4, NULL, NULL);
	ConnectBinaryTreeNodes(node5, node7, NULL);
	ConnectBinaryTreeNodes(node7, NULL, NULL);

	cout << "此树得深度为:" << TreeDepth(node1) << endl;

	DestoryTree(node1);
}

//空树
void test2()
{
	cout << "此树得深度为:" << TreeDepth(nullptr) << endl;
}

//只有一个结点的树
void test3()
{
	BinaryTreeNode *node1 = CreateBinaryTreeNode(1);
	ConnectBinaryTreeNodes(node1, nullptr, nullptr);

	cout << "此树得深度为:" << TreeDepth(node1) << endl;
	DestoryTree(node1);
}

int main()
{
	test1();
	cout << endl;
	test2();
	cout << endl;
	test3();
	cout << endl;

	system("pause");
	return 0;
}

运行结果:
此树得深度为:4

此树得深度为:0

此树得深度为:1

请按任意键继续. . .


你可能感兴趣的:(剑指Offer,C++,剑指Offer,二叉树,树的深度)