在本文中,我们将为您详细介绍662.MaximumWidthofBinaryTree二叉树的最大宽度的相关知识,并且为您解答关于二叉树最大宽度算法的疑问,此外,我们还会提供一些关于104.Maximu
在本文中,我们将为您详细介绍662. Maximum Width of Binary Tree二叉树的最大宽度的相关知识,并且为您解答关于二叉树最大宽度算法的疑问,此外,我们还会提供一些关于104. Maximum Depth of Binary Tree、111. Minimum Depth of Binary Tree 二叉树的最小深度、124. Binary Tree Maximum Path Sum - 二叉树中的最大路径和、124. Binary Tree Maximum Path Sum 二叉树上的最大路径和的有用信息。
本文目录一览:- 662. Maximum Width of Binary Tree二叉树的最大宽度(二叉树最大宽度算法)
- 104. Maximum Depth of Binary Tree
- 111. Minimum Depth of Binary Tree 二叉树的最小深度
- 124. Binary Tree Maximum Path Sum - 二叉树中的最大路径和
- 124. Binary Tree Maximum Path Sum 二叉树上的最大路径和
662. Maximum Width of Binary Tree二叉树的最大宽度(二叉树最大宽度算法)
[抄题]:
Given a binary tree, write a function to get the maximum width of the given tree. The width of a tree is the maximum width among all levels. The binary tree has the same structure as a full binary tree, but some nodes are null.
The width of one level is defined as the length between the end-nodes (the leftmost and right most non-null nodes in the level, where the null
nodes between the end-nodes are also counted into the length calculation.
Example 1:
Input:
1
/ \
3 2
/ \ \
5 3 9
Output: 4
Explanation: The maximum width existing in the third level with the length 4 (5,3,null,9).
Example 2:
Input:
1
/
3
/ \
5 3
Output: 2
Explanation: The maximum width existing in the third level with the length 2 (5,3).
Example 3:
Input:
1
/ \
3 2
/
5
Output: 2
Explanation: The maximum width existing in the second level with the length 2 (3,2).
Example 4:
Input:
1
/ \
3 2
/ \
5 9
/ \
6 7
Output: 8
Explanation:The maximum width existing in the fourth level with the length 8 (6,null,null,null,null,null,null,7).
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
从第三层开始,如果已经满了,就要添加新的index
if (level == list.size()) list.add(index);
[思维问题]:
完全没思路,因此需要一些基础知识
[英文数据结构或算法,为什么不用别的数据结构或算法]:
We know that a binary tree can be represented by an array (assume the root begins from the position with index 1
in the array). If the index of a node is i
, the indices of its two children are 2*i
and 2*i + 1
. The idea is to use two arrays (start[]
and end[]
) to record the the indices of the leftmost node and rightmost node in each level, respectively. For each level of the tree, the width isend[level] - start[level] + 1
. Then, we just need to find the maximum width.
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
index的初始值为啥是1?不懂,算了
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
找参数只是结果,重要的是把所需的变量找出来
还是按照起点、过程、终点来写,index的左右分别为 2 * index 和 2 * index + 1,
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[算法思想:迭代/递归/分治/贪心]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
[潜台词] :


/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int max = 1;
public int widthOfBinaryTree(TreeNode root) {
//corner case
if (root == null) return 0;
//initialization
List<Integer> startOfLevel = new ArrayList<Integer>();
//return
getWidth(root, 1, 0, startOfLevel);
return max;
}
public void getWidth(TreeNode root, int index, int level, List<Integer> list) {
//return null
if (root == null) return ;
//add the index to list
if (list.size() == level)
list.add(index);
max = Math.max(max, index + 1 - list.get(level));
//divide and conquer in left and right
getWidth(root.left, 2 * index, level + 1, list);
getWidth(root.right, 2 * index + 1, level + 1, list);
}
}
104. Maximum Depth of Binary Tree
Given a binary tree,find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
Note: A leaf is a node with no children.
Example:
Given binary tree [3,9,20,null,15,7]
,
return its depth = 3.
很简单的二叉树题目,直接看代码就ok了。
int maxDepth(struct TreeNode* root) { if(root==NULL) return 0; if(root->left==NULL&&root->right==NULL) return 1; else if(root->left!=NULL&&root->right==NULL) return maxDepth(root->left)+1; else if(root->left==NULL&&root->right!=NULL) return maxDepth(root->right)+1; else return _max(maxDepth(root->left)+1,maxDepth(root->right)+1); } int _max(int a,int b) { if(a>b) return a; else return b; }
111. Minimum Depth of Binary Tree 二叉树的最小深度
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
解答:
1.我的答案(递归)