题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
这又是一个水题啊,二叉树的深度,第一想法就是层序遍历,然后求出最大的层数。
实现如下:
#pragma once
#include <queue>
namespace tree_depth
{
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(nullptr), right(nullptr) {
}
};
class Solution {
public:
struct node
{
TreeNode* _node = nullptr;
int _depth = 0;
};
int TreeDepth(TreeNode* pRoot)
{
if (pRoot == nullptr)
{
return 0;
}
std::queue<node> q;
node n;
n._node = pRoot;
n._depth = 1;
q.push(n);
int max_depth = 1;
while (q.size() > 0)
{
n = q.front();
q.pop();
node new_n;
if (n._node->left != nullptr)
{
new_n._node = n._node->left;
new_n._depth = n._depth + 1;
max_depth = max_depth > new_n._depth ? max_depth : new_n._depth;
q.push(new_n);
}
if (n._node->right != nullptr)
{
new_n._node = n._node->right;
new_n._depth = n._depth + 1;
q.push(new_n);
max_depth = max_depth > new_n._depth ? max_depth : new_n._depth;
}
}
return max_depth;
}
};
}
test.cpp
#pragma once
#include "tree_depth.h"
namespace tree_depth
{
void start_test()
{
Solution s;
TreeNode *t1 = new TreeNode(1);
TreeNode *t2 = new TreeNode(2);
TreeNode *t3 = new TreeNode(3);
TreeNode *t4 = new TreeNode(4);
TreeNode *t5 = new TreeNode(5);
TreeNode *t6 = new TreeNode(6);
TreeNode *t7 = new TreeNode(7);
TreeNode *t8 = new TreeNode(8);
TreeNode *t9 = new TreeNode(9);
TreeNode *t10 = new TreeNode(10);
t3->left = t2;
t3->right = t9;
t2->left = t1;
t9->left = t7;
t9->right = t10;
t7->right = t8;
t8->left = t5;
int ret = s.TreeDepth(t3);
}
}
二、其他解法
递归层序遍历
int TreeDepth(TreeNode* pRoot)
{
if (pRoot == nullptr)
{
return 0;
}
int l = TreeDepth(pRoot->left);
int r = TreeDepth(pRoot->right);
return (l < r ? r : l) + 1;
}