[104]二叉树的最大深度

73 阅读1分钟

[104]二叉树的最大深度
[剑指 Offer 55 - I] 二叉树的深度

方法1:仅在叶子节点做比较.

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

#include "limits.h"
#include "stdio.h"

#define MAX(a, b) ((a) > (b) ? (a) : (b))
void traverseTree(struct TreeNode *node, int currDepth, int *maxDepth) {
    if (node == NULL || *maxDepth >= INT_MAX) {
        return;
    }

    if (node->left == NULL && node->right == NULL) {
        *maxDepth = MAX(*maxDepth, currDepth);
        return;
    }

    currDepth++;
    traverseTree(node->left, currDepth, maxDepth);
    traverseTree(node->right, currDepth, maxDepth);
    return;
}

int maxDepth(struct TreeNode *root) {
    int maxDepth = 0;
    traverseTree(root, 1, &maxDepth);
    return maxDepth;
}

方法2:每个递归点做比较,效率低一些.

/**
 * 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) {}
 * };
root->left
root->right
 */
class Solution {
public:
    int maxDepth(TreeNode* root) {
            if(root == nullptr)
                return 0;
            return 1 + max(maxDepth(root->left),maxDepth(root->right));
        }

    
};
  • 使用递归的话,每个节点都需要做相同的操作,对于只需要统计终点的题目不友好.
  • 二叉树的公共遍历方法:
void traverse(TreeNode root) {
    if (root == null) {
        return;
    }
    // 前序位置
    traverse(root.left);
    // 中序位置
    traverse(root.right);
    // 后序位置
}