diff --git a/104. Maximum Depth of Binary Tree.md b/104. Maximum Depth of Binary Tree.md new file mode 100644 index 0000000..26b9f50 --- /dev/null +++ b/104. Maximum Depth of Binary Tree.md @@ -0,0 +1,50 @@ +# [104. Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/description/) +# 思路 +## 思路一: 递归 +最简单的思路就是递归。若树非空,则树高就是: 1 + max(左子树高,右子树高),递归出口就是树为空。 +## 思路二: 非递归 +可考虑用层序遍历的方法计算树高。 +用last指针表示每一层的最后一个节点,每当遍历到这个节点即将树高加1并更新last指针。 +last初始为root,后面每当遍历完每层最后一个节点后,即将last更新成下一层的最后一个节点,为此需要用一个tmp来不断记录能确定的下一层的最右节点。 + +# C++ +## 思路一 +``` C++ +class Solution { +public: + int maxDepth(TreeNode* root) { + if(root == NULL) return 0; + else return 1 + max(maxDepth(root -> left), maxDepth(root -> right)); + } +}; +``` +## 思路二 +``` C++ +class Solution { +public: + int maxDepth(TreeNode* root) { + if(root == NULL) return 0; + int res = 0; + queueq; + TreeNode *p, *tmp=NULL, *last=root; // tmp用来更新last用 + q.push(root); + while(!q.empty()){ + p = q.front(); + q.pop(); + if(p -> left){ + tmp = p -> left; + q.push(tmp); + } + if(p -> right){ + tmp = p -> right; + q.push(tmp); + } // tmp记录了直到现在下一层最右的节点 + if(p == last){ // 遇到了last + res++; // 树高加1 + last = tmp; // 更新last + } + } + return res; + } +}; +```