二叉树的深度(Python and C++解法)

题目:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-shu-de-shen-du-lcof

思路:

  采用两种思路,一种是DFS中的后序遍历,另一种是BFS中的层序遍历。  

  树的深度优先搜索往往利用递归实现。根据此树的深度和其子树的深度之间的关系,此树的深度等于左子树的深度与右子树的深度中的最大值 +1。

  树的层序遍历往往利用辅助数据结构实现,每遍历一层,则层计数+1 ,直到遍历完成,则可得到树的深度。

Python解法(DFS):

 1 class TreeNode:
 2     def __init__(self, x):
 3         self.val = x
 4         self.left = None
 5         self.right = None
 6 
 7 class Solution:
 8     def maxDepth(self, root: TreeNode) -> int:
 9         if root is None:
10             return 0
11         leftDepth = self.maxDepth(root.left)  # 找左子树的最大深度
12         rightDepth = self.maxDepth(root.right)  # 找右子树的最大深度
13         return max(leftDepth, rightDepth) + 1

C++解法(BFS):

 1 struct TreeNode {
 2     int val;
 3     TreeNode *left;
 4     TreeNode *right;
 5     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 6 };
 7  
 8 class Solution {
 9 public:
10     int maxDepth(TreeNode* root) {
11         int depth = 0;
12         if(root == NULL)  // 终止条件
13             return depth;
14         vector<TreeNode*> storeNode;  // 存储当前层节点
15         storeNode.push_back(root);
16         while(storeNode.size()) {
17             depth++;  // 更新深度
18             vector<TreeNode*> tempStoreNode;  // 存储下一层节点
19             for(TreeNode *node : storeNode) {
20                 if(node -> left)
21                     tempStoreNode.push_back(node -> left);
22                 if(node -> right)
23                     tempStoreNode.push_back(node -> right);
24             }
25             storeNode = tempStoreNode;  // 将下一层的节点复制给当前层
26         }
27         return depth;
28     }
29 };
posted @ 2020-07-31 15:32  孔子?孟子?小柱子!  阅读(274)  评论(0编辑  收藏  举报