我正在尝试学习二进制搜索树,我有一个与BST插入有关的疑问。这不是我的鳕鱼 e我从http://cslibrary.stanford.edu/110/BinaryTrees.html获取了这个
library(data.table)
setDT(df)[V1 %chin% l]
我怀疑正如代码中提到的,我不明白为什么root不会在插入时更改(最后一行)。为什么它是同一个root每次?
答案 0 :(得分:1)
此代码中的递归调用不会影响根节点,因为您发送根节点 在第一次(在那时root是NULL)并将进入if条件 否则不会影响root考虑下面的树并调用
2 -- (call insert and gave it root node, data -4)
/ \
1 10
/
5
第一次调用将检查root == NULL ---如果这是假的 将测试大于或小于2的任何值,并将在左节点上进行递归调用
2
/ \
1-- 10 (call insert and gave it left child of root node, data -4)
/
5
并且此节点再次不为NULL将使该节点的左侧左侧的另一个递归调用为NULL
2
/ \
1 10
/ /
NULL 5 (call insert and gave it left child of left child root node, data -4)
这里将创建新节点并返回将此节点分配到root的左侧并返回其上的指针以进行第一次调用
2
/ \
1 10
/ /
-4 5
只是...... 我的建议在学习BST之前阅读了有关递归函数的好处