展开后序遍历
int maxDepth(struct TreeNode* root){
if (!root) return 0;
int leftHight = maxDepth(root->left);
int rightHight = maxDepth(root->right);
int tmp = leftHight > rightHight ? leftHight : rightHight;
return tmp+1;
}
精简
int maxDepth(struct TreeNode* root){
if (!root) return 0;
return 1 + fmax(maxDepth(root->left), maxDepth(root->right));
}
这个还不是很透彻,判断子节点那里还是混乱
int minDepth(struct TreeNode* root){
if (!root) return 0;
int leftDepth = minDepth(root->left);
int rightDepth = minDepth(root->right);
if (!root->left && root->right) return 1+rightDepth;
if (!root->right && root->left) return 1+leftDepth;
return 1 + fmin(leftDepth, rightDepth);
}
后序遍历:
int countNodes(struct TreeNode* root){
if (!root) return 0;
int leftNum = countNodes(root->left);
int rightNum = countNodes(root->right);
int result = leftNum + rightNum + 1;
return result;
}
层序遍历:
int countNodes(struct TreeNode* root){
if (!root) return 0;
struct TreeNode* queue[50001];
int head = 0, tail = 0;
queue[tail++] = root;
while (head < tail)
{
int start = head;
head = tail;
for (int i=start; i<head; i++)
{
if (queue[i]->left) queue[tail++] = queue[i]->left;
if (queue[i]->right) queue[tail++] = queue[i]->right;
}
}
return tail;
}