我有一个错误的BST,其中两个节点不在正确的位置。我知道BST的无序遍历是排序的。因此,我用三个指针遍历树:第一、最后、中间。如果当前节点小于上一个节点,我将上一个设置为第一个,将当前节点设置为中间节点。这是第一次违规。当第二个冲突发生时,我将最后一个指定为当前节点。现在,当最后一个为<code>NULL</code>时,先交换第一个和第二个,当最后最后一个不是<code>NULL</code>时,首先交换最后一个。这就是我所做的:
class Node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
def fixBST(root,first,middle,last,prev):
if( root ):
fixBST( root.left, first, middle, last, prev )
if (prev and root.data < prev.data):
if ( first is None ):
first = prev
middle = root
else:
last = root
prev = root
fixBST( root.right, first, middle, last, prev )
return (first,middle,last)
def correctBST( root ):
first = middle = last = prev = None
first,middle,last = fixBST( root, first, middle, last, prev )
if( first and last ):
t = first.data
first.data = last.data
last.data = t
elif( first and middle ):
t = first.data
first.data = middle.data
middle.data = t
def printInorder(node):
if (node == None):
return
printInorder(node.left)
print node.data
printInorder(node.right)
root = Node(6)
root.left = Node(10)
root.right = Node(2)
root.left.left = Node(1)
#root.left.right = Node(3)
#root.right.right = Node(12)
#root.right.left = Node(7)
print "Inorder Traversal of the original tree \n"
printInorder(root)
correctBST(root)
print "\nInorder Traversal of the fixed tree \n"
printInorder(root)
第二次打印顺序遍历后,我得到相同的错误树。我相信第一个、中间、最后一个值没有被存储?我错过了什么吗?
您的函数固定BST
和交换
什么都不做。第一个
、中间
和最后一个
仅限于固定BST
的本地范围,所以从这个意义上说,是的,它们不被存储。Python通过赋值传递。
def swap(a,b):
t = a
a = b
b = t
a, b = 1, 2
swap(a, b)
print(a, b)
# 1 2
您应该做的是返回一个值并重新分配或使用全局范围:
# Reassign
def swap(a,b):
return b, a
a, b = 1, 2
a, b = swap(a, b)
print(a, b)
# 2 1
# Global
a, b = 1, 2
def swap():
global a
global b
t = a
a = b
b = t
swap()
print(a, b)
# 2 1
也许重新分配是应该走的路。
我在实现哈夫曼算法,为此我使用了一个双链表。实现需要对列表进行排序,但仅仅交换数据是不够的——我需要交换整个节点。然而,这比我预想的要复杂一些。 我使用了这个选择排序的变体,但它会导致访问冲突错误。我假设这是因为我试图访问某个空指针,这两个条件本应阻止它。 任何帮助或建议都将不胜感激。
问题内容: 我已经通过npm install安装了节点模块,然后尝试在命令提示符下执行gulp sass-watch。之后,我得到以下回应。 在gulp sass-watch之前尝试过这个 问题答案: 我遇到了同样的错误。我怀疑您正在使用节点12和gulp3。该组合不起作用:https : //github.com/gulpjs/gulp/issues/2324 从1月开始的以前的解决方法也不起作
我已经通过npm install安装了节点模块,然后我尝试在命令提示符下执行gulp sass-watch。之后我得到了下面的回应。 我以前也试过
我在谷歌上搜索了这个,但他们都在谈论“交换节点而不交换数据”。 我尝试自己编写一个交换节点方法: 如您所见,和相互更改,但打印结果不交换。如何交换两个节点及其数据? 编辑:下面的完整示例
我刚开始学习javascript和nodejs(express和ejs)来开发我的公文包。当我运行下面的javascript时,我遇到了错误。有人能帮我吗 终端显示此错误。 在Object中未定义文档。(C:\用户\milkc\WebDevelopment\实践\sassPortfolio\index.js:21: 17)。_compile(内部/模块/cjs/loader.js:701: 30)
我正在将一个包含大量自定义绘制的Swing/Graphics2D应用程序转换为JavaFX2应用程序。虽然我非常喜欢这个新的API,但当我在鼠标光标下方绘制椭圆时,无论鼠标移动到哪里,我似乎都会遇到性能问题。当我以稳定的方式移动鼠标时,我注意到椭圆总是在鼠标轨迹的后面几厘米处绘制,只有当我停止移动光标时,椭圆才会出现。这是一个只有少数节点的场景图。在我的Swing应用程序中,我没有这个问题。 我想