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

来源:互联网 发布:linux 系统文件夹 编辑:程序博客网 时间:2024/04/29 19:42

题目:

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


分析


如果一颗树只有一个根结点,那么该树的深度为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请按任意键继续. . .


0 0