当前位置: 代码迷 >> 综合 >> leetcode_113 Maximum Depth of Binary Tree
  详细解决方案

leetcode_113 Maximum Depth of Binary Tree

热度:85   发布时间:2024-02-07 08:26:53.0

题目:

Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

Note: A leaf is a node with no children.

Example:

Given binary tree [3,9,20,null,null,15,7],

3/ \9  20/  \15   7

return its depth = 3.

解法一:深度优先遍历DFS

每递归一次加1

代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxDepth(TreeNode* root) {if(root == NULL)return 0;return 1 + max(maxDepth(root->left),maxDepth(root->right));}
};

解法二:广度优先BFS

代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxDepth(TreeNode* root) {if(root == NULL)return 0;queue<TreeNode*> Q;Q.push(root);int res = 0;while(!Q.empty()){int len = Q.size();res++;for(int i = 0; i < len; i++){TreeNode* p = Q.front();Q.pop();if(p->left)Q.push(p->left);if(p->right)Q.push(p->right);}}return res;}
};

方法三:迭代DFS

使用栈分别存储节点和深度,节点和深度同时出栈,表示当前节点的深度,然后随着节点的加深,深度增加,最后求出最大深度

代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxDepth(TreeNode* root) {if(root == NULL)return 0;stack<TreeNode*> stk;stack<int> depStk;int depth = 1;int max = 0;while(root != NULL || !stk.empty()){while(root){stk.push(root);depStk.push(depth);root = root->left;depth++;}root = stk.top();depth = depStk.top();stk.pop();depStk.pop();if(max < depth)max = depth;root = root->right;depth++;    }return max;}
};

 

  相关解决方案