题目
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路
求二叉树的深度。
1、递归的方法,属于DFS(深度优先搜索)。
2、按照层次遍历,属于BFS(广度优先搜索)。
一、深度优先(先序遍历)
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution
{
public:
int treeDepth(TreeNode *root)
{
if (root == nullptr)
return 0;
int left = treeDepth(root->left);
int right = treeDepth(root->right);
return (left > right) ? (left + 1) : (right + 1);
}
};二、广度优先(层次遍历)
每次让一层的所有节点的孩子入队列,才进入下一层。用 while(len--)
class Solution {
public:
int TreeDepth(TreeNode* root)
{
if (root == nullptr)
return 0;
deque<TreeNode *> d;
d.push_back(root);
int level = 0;
while(d.size())
{
level ++;
int len = d.size();
while (len--)
{
if (d.front()->left)
d.push_back(d.front()->left);
if (d.front()->right)
d.push_back(d.front()->right);
d.pop_front();
}
}
return level;
}
};

该博客介绍了如何求解二叉树的深度,提供了两种方法:深度优先搜索(DFS)的递归方式和广度优先搜索(BFS)的层次遍历方式。通过先序遍历和层次遍历的实现,计算从根节点到最远叶节点的最长路径长度,即树的深度。
8224

被折叠的 条评论
为什么被折叠?



