我正在将以下数据作为赋值的一部分读取到二叉树(不是严格的二叉查找树)中:
5
4 1 2
2 3 4
5 -1 -1
1 -1 -1
3 -1 -1
它们被读取到pythonself.key
、self.left
和self.right
中的三个列表中,其中第一行具有整数n
是节点数。接下来的n行是键,左,右。其中左是父级左子级的键是key[左]
,同样右子级的键是key[右]
,因此例如第一行是4的键是根,key[1]
意味着2是4的左子级,key[2]
意味着5是4的右子级,以此类推,-1代表左右意味着这个键是叶子:
此示例的树结构
问题是正在添加根的左右子节点,但没有添加其中的任何子节点。我是否正确地将节点添加到树中?我不能仅根据键的值添加它们,因为它不是严格的二叉查找树,正如其他一些示例所表明的那样,例如root=0和左子节点=70和右子节点=20。inorder遍历的输出是2 4 5
(应该是1 2 3 4 5
),这让我相信我没有添加更多的节点。任何关于添加方法的帮助都将不胜感激...
import sys, threading
sys.setrecursionlimit(10**6) # max depth of recursion
threading.stack_size(2**27) # new thread will get stack of such size
class Node:
def __init__(self, val):
self.l = None
self.r = None
self.v = val
class Tree:
def __init__(self):
self.root = None
def getRoot(self):
return self.root
def add_root(self, val):
if(self.root is None):
self.root = Node(val)
def add_left(self, val, node):
if(node.l is None):
node.l = Node(val)
def add_right(self, val, node):
if(node.r is None):
node.r = Node(val)
def deleteTree(self):
# garbage collector will do this for us.
self.root = None
def inOrder(self):
self.result = []
if(self.root is not None):
self._inOrder(self.root, self.result)
return self.result
else:
print('root is None')
def _inOrder(self, node, result):
if(node != None):
self._inOrder(node.l, self.result)
self.result.append(node.v)
self._inOrder(node.r, self.result)
def read(self):
self.n = int(sys.stdin.readline())
self.key = [0 for i in range(self.n)]
self.left = [0 for i in range(self.n)]
self.right = [0 for i in range(self.n)]
for i in range(self.n):
[a, b, c] = map(int, sys.stdin.readline().split())
self.key[i] = a
self.left[i] = b
self.right[i] = c
#adding root
self.add_root(self.key[0])
if self.left[0] != -1:
#add left of root
self.add_left(self.key[self.left[0]], self.root)
if self.right[0] != -1:
#add right of root
self.add_right(self.key[self.right[0]], self.root)
#where it is not adding left and right nodes
for i in range(1, self.n):
if self.left[i] != -1:
# adding the other left nodes
self.add_left(self.key[self.left[i]], Node(self.key[i]))
if self.right[i] != -1:
# adding the other right nodes
self.add_right(self.key[self.right[i]], Node(self.key[i]))
def main():
tree = Tree()
tree.read()
print(" ".join(str(x) for x in tree.inOrder()))
#print(" ".join(str(x) for x in tree.preOrder()))
#print(" ".join(str(x) for x in tree.postOrder()))
threading.Thread(target=main).start()
谢谢我让它工作了——我把节点Node(键[I])
添加到字典和self中。nodes[val]=[node,node.l,node.r]
当添加左键时,递归地在字典中搜索索引、前序和后序树遍历。
class Node:
def __init__(self, val):
self.l = None
self.r = None
self.v = val
class Tree:
def __init__(self):
self.root = None
self.nodes = {}
def getRoot(self):
return self.root
def add_root(self, val):
if(self.root is None):
self.root = Node(val)
self.nodes[val] = [self.root,-1,-1]
def add_left(self, val, node):
if(node.l is None):
node.l = Node(val)
self.nodes[node.v][1] = node.l
def add_right(self, val, node):
if(node.r is None):
node.r = Node(val)
self.nodes[node.v][2] = node.r
def inOrder(self):
self.result = []
if(self.root is not None):
self._inOrder(self.root, self.result)
return self.result
else:
print('root is None')
def _inOrder(self, node, result):
if(node is not None):
try:
self._inOrder(self.nodes[node.v][1], self.result)
except (IndexError, AttributeError):
pass
self.result.append(node.v)
try:
self._inOrder(self.nodes[node.v][2], self.result)
except (IndexError, AttributeError):
pass
def preOrder(self):
self.result = []
if(self.root is not None):
self._preOrder(self.root, self.result)
return self.result
else:
print('root is None')
def _preOrder(self, node, result):
if(node is not None):
self.result.append(node.v)
try:
self._preOrder(self.nodes[node.v][1], self.result)
except (IndexError, AttributeError):
pass
try:
self._preOrder(self.nodes[node.v][2], self.result)
except (IndexError, AttributeError):
pass
def postOrder(self):
self.result = []
if(self.root is not None):
self._postOrder(self.root, self.result)
return self.result
else:
print('root is None')
def _postOrder(self, node, result):
if(node is not None):
try:
self._postOrder(self.nodes[node.v][1], self.result)
except (IndexError, AttributeError):
pass
try:
self._postOrder(self.nodes[node.v][2], self.result)
except (IndexError, AttributeError):
pass
self.result.append(node.v)
def read(self):
self.n = int(sys.stdin.readline())
self.key = [0 for i in range(self.n)]
self.left = [0 for i in range(self.n)]
self.right = [0 for i in range(self.n)]
for i in range(self.n):
[a, b, c] = map(int, sys.stdin.readline().split())
self.key[i] = a
self.left[i] = b
self.right[i] = c
#adding root
self.add_root(self.key[0])
for i in range(1, self.n):
self.nodes[self.key[i]] = [Node(self.key[i]),-1,-1]
for i in range(0, self.n):
if self.left[i] != -1:
# adding the other left nodes
self.add_left(self.key[self.left[i]], self.nodes[self.key[i]][0])
if self.right[i] != -1:
# adding the other right nodes
self.add_right(self.key[self.right[i]], self.nodes[self.key[i]][0])
我最近开始学习数据结构和算法。我正在创建一个二叉树,它只在树的左侧添加节点。我如何创建这样一种方式,即它应该在根节点的两侧添加节点,并如下所示: 以下是我编写的代码: 主要类别:
我正在用C编写一个简单的二叉树程序,现在它只存储在根节点输入的最新值,例如,如果我在树中输入10,然后在树中输入9,那么9只是覆盖10作为根节点,所以树只存储值9。 我在网上查看了多个C二叉树解决方案,并尝试了它们的实现版本,但仍然没有成功。 这是树中单个节点的结构 到目前为止,我的二叉树课程 插入方法 然后在这样的菜单中调用这个方法 逻辑对我来说似乎都很好,除了我尝试不使用构造函数而只是单独设置
我想在布局的右侧和底部添加一个光影。我尝试使用,但它在布局的所有四面都添加了一个厚厚的阴影。我需要创建和设置什么绘图器作为背景?
问题内容: 我想在的标题上添加一个小图标。因此,我设置了一个空标题并添加了一个包含a 和as的图形。这样,图标显示在文本结尾附近。我希望它始终显示在的右侧边框旁边。我怎样才能做到这一点?我也尝试使用a 并将其添加到中间,在右侧添加,但是没有获得TitledPane的最大大小。所以我试图将MaxWidth设置为Max- Value,但这没有帮助 有人知道该怎么办吗? 编辑:我创建的“自定义”控件将在
注:Stream-1为主流,Stream-2为侧输入。主流正在不断从Kafka那里获取数据。对于侧输入,最初在应用程序启动时从DB加载所有表数据,然后在表数据更新时读取新数据(不频繁)。 示例结构: 我被指为以下链接。 用缓慢发展的数据连接流:我们用于丰富的侧输入是随着时间发展的(数据是从DB读取的)。这可以通过等待一些初始数据可用,然后处理主输入,并在新数据到达时不断地将其摄取到内部输入结构中来
问题内容: 我试图在 UINavigationBar的* 右侧添加 自定义视图 。我尝试了以下操作,但是视图未显示!请帮助,在此先感谢! * 问题答案: //创建uiview并添加三个自定义按钮