[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);
// 后序位置
}