gpt4 book ai didi

python - 将查找节点与二叉树混淆

转载 作者:太空宇宙 更新时间:2023-11-04 10:08:01 26 4
gpt4 key购买 nike

我用 python 代码构建了一个二叉树,现在我可以使用 testTree.printInorder(testTree.root) 按顺序打印它。我试图查找一些节点,但函数 findNode 不再起作用。 print testTree.findNode(testTree.root,20) 无论我输入什么,都不会返回 None。

class TreeNode:
def __init__(self, value):
self.left = None;
self.right = None;
self.data = value;


class Tree:
def __init__(self):
self.root = None
def addNode(self,node,value):
if node == None:
self.root = TreeNode(value)
else:
if value < node.data:
if node.left == None:
node.left = TreeNode(value)
else:
self.addNode(node.left,value)
else:
if node.right == None:
node.right = TreeNode(value)
else:
self.addNode(node.right,value)

def printInorder(self,node):
if node != None:
self.printInorder(node.left)
print node.data
self.printInorder(node.right)

def findNode(self,node,value):
if self.root != None:
if value == node.data:
return node.data
elif value < node.data and node.left != None:
self.findNode(node.left,value)
elif value > node.data and node.right != None:
self.findNode(node.right,value)
else:
return None
testTree = Tree()
testTree.addNode(testTree.root, 200)
testTree.addNode(testTree.root, 300)
testTree.addNode(testTree.root, 100)
testTree.addNode(testTree.root, 30)
testTree.addNode(testTree.root, 20)
#testTree.printInorder(testTree.root)
print testTree.findNode(testTree.root,20)

最佳答案

任何没有显式返回的函数都将返回 None。

您还没有在 findNode 中返回递归调用。所以在这里。

if value == node.data:
return node.data
elif value < node.data and node.left != None:
return self.findNode(node.left,value)
elif value > node.data and node.right != None:
return self.findNode(node.right,value)

现在,我不禁觉得这有点吵。您总是从根开始添加,是吗?

testTree.addNode(testTree.root, 200)

你更愿意这样做

testTree.addNode(200)

为此,您基本上是在 TreeNode 类上实现您的方法。所以,对于 addNode

您也可以从递归中“向上返回”,而不是将节点作为参数“向下传递”。

class TreeNode:
def __init__(self, value):
self.left = None
self.right = None
self.data = value

def addNode(self,value):
if self.data == None: # Ideally, should never end-up here
self.data = value
else:
if value < self.data:
if self.left == None:
self.left = TreeNode(value)
else:
self.left = self.left.addNode(value)
else:
if self.right == None:
self.right = TreeNode(value)
else:
self.right = self.right.addNode(value)

return self # Return back up the recursion

然后,在Tree 类中,将addNode 职责委托(delegate)给根

class Tree:
def __init__(self):
self.root = None

def addNode(self,value):
if self.root == None:
self.root = TreeNode(value)
else:
self.root = self.root.addNode(value)

关于python - 将查找节点与二叉树混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39928780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com