题目:
输入一颗二叉树的根结点,求该树的深度。从根结点到叶节点依次经过的结点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
分析
如果一颗树只有一个根结点,那么该树的深度为1。如果该树只有左子树没有右子树,那么该树的深度应该是左子树的深度加1;同理,如果该树只有右子树而没有左子树,那么该树的深度应该是右子树的深度加1。如果该树既有左子树又有右子树,那么该树的深度应该是左子树和右子树深度的最大值加1。
代码:
#include"BinaryTree.h"
#include<iostream>
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
请按任意键继续. . .