【LeetCode】二叉树的最大深度

【问题】给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],

3
/ \
9 20
/ \
15 7

返回它的最大深度 3 。

【DFS解法】

我们使用栈结构来储存每个节点root以及该节点的深度deep,由于对tuple的使用还不太熟练,需要多练习,一次使用tuple来讲树结构体指针和对应的整型变量深度。从根节点开始遍历,首先一直遍历左子节点,并将节点压入栈中,如果左子节点为空,则从栈中弹出,并开始遍历弹出节点的右子节点。这个过程也就相当于回溯了,回到上一级去。

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

【BFS解法】

这个其实质就是层次遍历,使用队列来储存树节点,并使用size变量记录每次节点的数量,在一次循环中,处理掉一层的节点,具体做法:将某一层所有节点的子节点压入队列后,并将所有的节点移除队列。
在处理某一层的树节点的同时,使用count变量记录处理的层数。即为最大深度!

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root == nullptr){
            return 0;
        }
        queue<TreeNode*> que;
        que.push(root);
        int count = 0;
        while(que.size() != 0){
            int size = que.size();

            while(size--){
                TreeNode* tmp = que.front();
                if(tmp->left != nullptr) que.push(tmp->left);
                if(tmp->right != nullptr) que.push(tmp->right);
                que.pop();
            }
            count++;
        }
        return count;
    }
};

猜你喜欢

转载自www.cnblogs.com/zhudingtop/p/11644772.html