我无法理解为什么每次放置新节点时root都会获取新值?我想根变量应该是对二叉树中第一个元素的引用。
public class BST<Key extends Comparable<Key>, Value> {
private Node root; // root of BST
private class Node {
private Key key; // sorted by key
private Value val; // associated data
private Node left, right; // left and right subtrees
private int size; // number of nodes in subtree
public Node(Key key, Value val, int size) {
this.key = key;
this.val = val;
this.size = size;
}
}
public void put(Key key, Value val) {
root = put(root, key, val); //?!!
}
private Node put(Node x, Key key, Value val) {
if (x == null) return new Node(key, val, 1);
int cmp = key.compareTo(x.key);
if (cmp < 0) x.left = put(x.left, key, val);
else if (cmp > 0) x.right = put(x.right, key, val);
else x.val = val;
x.size = 1 + size(x.left) + size(x.right);
return x;
}
}
答案 0 :(得分:0)
root
实际上每次都没有获取新值。递归辅助函数put()
沿树向下,直到它到达死胡同,在这种情况下,它创建一个新节点并将其返回到最后一个被访问节点,
if (x == null) return new Node(key, val, 1);
将其指定为left
或right
:
if (cmp < 0) x.left = put(x.left, key, val);
else if (cmp > 0) x.right = put(x.right, key, val);
然后,该节点再次作为它的父节点的left
或right
返回,依此类推,直到树的最后一个,直到最后的旧/现有根为返回:
root = put(root, key, val);
如果树完全为空(如果root
为null
),则辅助函数会立即创建一个新节点并返回该节点。
一个关键观察:
无论传递给辅助函数put
是什么,因为第一个参数不变,除了,如果它是null
,在这种情况下创建并返回一个新节点