问题描述
这是一个非常普遍的问题
因此,我正在leetcode.com上使用二进制搜索树进行一些练习。这对我没有意义。黄色高亮显示的1位于2的右侧,但3大于2,因此从技术上讲3不应位于右侧,而1则应位于左侧吗?如果有人对二进制搜索树一无所知
这是屏幕截图
这是数组顺序
[4,2,6,3,1,5]
解决方法
我认为问题只是关于Binary Tree,而不是Binary Search Tree,在这种情况下,左节点不需要比右节点小,这样就可以通过。
Python
class Solution:
def addOneRow(self,root,val,depth):
sentinel = TreeNode(None)
sentinel.left = root
levels = [sentinel]
for _ in range(depth - 1):
levels = [child for node in levels for child in (node.left,node.right) if child]
for node in levels:
node.left,node.left.left = TreeNode(val),node.left
node.right,node.right.right = TreeNode(val),node.right
return sentinel.left
Java
public final class Solution {
public static final TreeNode addOneRow(
final TreeNode root,final int val,final int depth
) {
if (depth == 0 || depth == 1) {
TreeNode sentinel = new TreeNode(val);
sentinel.left = depth == 1 ? root : null;
sentinel.right = depth == 0 ? root : null;
return sentinel;
}
if (root != null && depth >= 2) {
root.left = addOneRow(root.left,depth > 2 ? depth - 1 : 1);
root.right = addOneRow(root.right,depth > 2 ? depth - 1 : 0);
}
return root;
}
}
参考文献
- 有关其他详细信息,请参见Discussion Board,在这里您可以找到许多具有各种languages且已被广泛接受的解决方案,包括低复杂度算法和渐近runtime / {{ 3}}分析memory,1 。