如何解决在平衡二叉搜索树 Ruby 中返回 Level-1 节点?
我正在使用排序数组在 Ruby 中递归创建平衡二叉搜索树。但是,我在结束返回值时遇到了问题。不是所有的节点冒泡起来,创建一棵树并返回基本的 1 级节点,而是返回树底部的最后一个节点。
似乎正在创建的节点根本没有链接在一起(使用 p list
打印实例化的类只会返回最后一个节点)。如何将节点链接在一起并返回 1 级根节点?
代码:
class Node
include Comparable
attr_accessor :value,:left,:right
def initialize(value,left = nil,right = nil)
@value = value
@left = left
@right = right
end
end
class Tree
attr_accessor :sorted_arr,:arr
def initialize(arr)
@arr = arr
@sorted_arr = arr.sort.uniq
end
#Problem: nodes not being linked together
def build_tree(arr,start,last)
if start > last
return nil
end
mid_index = (start + last) / 2
@root = Node.new(arr[mid_index])
@root.left = build_tree(arr,mid_index - 1)
@root.right = build_tree(arr,mid_index + 1,last)
return @root
end
end
list = Tree.new([1,7,4,23,8,9,3,6,67,6345,324])
list.build_tree(list.sorted_arr,list.sorted_arr.length-1)
p list
解决方法
您应该使用 root
而不是 @root
。
以 @
开头的那些是实例变量,所以当你调用:
@root.left = build_tree(arr,start,mid_index - 1)
在该 build_tree
调用中,最终您还将调用 @root = Node.new(arr[mid_index])
,它将替换已在父调用中设置的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。