作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用后序遍历在 h 高度构建一个完美的二叉树。基本上我正在尝试这样做:
height = 3
numbers = list(range(1, 2 ** height))
tree = buildTree(height, numbers)
结果会是这样的:
7
3 6
1 2 4 5
我不太担心在树结构中打印出来。我只是想正确地构建树。我的代码非常简单,但我很难找出它的问题所在。
class Node:
def __init__(self, root=None):
self.root = root
self.left = self.right = None
def postorder(height, numbers):
if height == 1:
return Node(numbers.pop())
node = Node()
node.left = postorder(height-1, numbers)
node.right = postorder(height-1, numbers)
node.root = numbers.pop()
return node
最佳答案
我终于明白了。这样做的唯一方法是从右到左填充树,并在递归时递减数字。我试图从左到右填充。
def postorder(height, nums):
if h == 1:
return Node(nums.pop())
node = Node()
node.root = nums.pop()
node.right = postorder(height-1, nums)
node.left = postorder(height-1, nums)
return node
height = 3
tree = postorder(height, list(range(1, 2 ** height)))
可能值得注意的是发生了什么,因为它让我有点困惑。一棵完美的树有 k 个元素,其中 k = (2^height) -1。 list(range(1, 2 ** height))
创建值列表,因为 range
上的停止点是唯一的。无需反转列表以从右到左构建,因为 pop()
会从列表中删除最后一个元素。我从左到右构建并首先填充最大的元素。
This is being built. It is being built in this order.
7 1
3 6 5 2
1 2 4 5 7 6 4 3
关于python - 使用后序遍历创建完美的二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62960591/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!