我正在尝试解决以下问题:
首先,我们有一个根为0且没有其他节点的二叉搜索树。 然后,我们添加n个给定数字,例如a,其中:
例如,我们开始向树中添加n = 7个数字:
19 3 5 25 21 -4 2
在添加完所有数字后,目标是按照它们被添加的顺序找到每个节点的父节点:
0 19 3 19 25 0 3
我的第一种方法是在添加节点时构建树并同时打印父节点:
private static TreeNode treeInsert(TreeNode root, TreeNode newNode) {
TreeNode y = null;
TreeNode x = root;
while (x != null) {
y = x;
if (newNode.key < x.key) x = x.left;
else x = x.right;
}
newNode.parent = y;
if (y == null) root = newNode;
else if (newNode.key < y.key) y.left = newNode;
else y.right = newNode;
return newNode;
}
以及这个辅助类:
class TreeNode {
TreeNode left;
TreeNode right;
TreeNode parent;
int key;
public TreeNode(int key) {
this.key = key;
}
所以我可以找到父级。这里的问题是,如果给定的数字太多,并且我们考虑树是不平衡的,那么添加新节点可能永远需要很长时间。此问题的时间限制为1,由于上述原因,我已经超过了限制。 我无法平衡树,因为父节点会改变。但也许有一种方法可以解决该问题,而无需构建BST,只需专注于使用数字查找父级。 谢谢。