[英]PreOrder Traversal in Python Recursive mrethod
Why is this struck in loop,Can you please help me 为什么会发生这种情况,请您帮我一下
class createTreeNode():
def __init__(self,value):
self.value=value
self.left=None
self.right=None
def preOrderTraversal(root):
while(root):
print root.value
preOrderTraversal(root.left)
preOrderTraversal(root.right)
return
def insertNodetoBST(root,i):
if(root==None):
return createTreeNode(i)
temproot=root;
while(temproot):
if(temproot.value>i):
if(temproot.left==None):
temproot.left=createTreeNode(i)
return root
temproot = temproot.left
else:
if (temproot.right == None):
temproot.right = createTreeNode(i)
return root
temproot=temproot.right
return root
def createBSTfromList():
root=None
l = [1,2]
for i in l:
root=insertNodetoBST(root,i);
preOrderTraversal(root);
createBSTfromList();
Your code loops forever because you have while(root)
in your preOrderTraversal
function. 您的代码将永远循环,因为preOrderTraversal
函数中具有while(root)
。 Since you're not modifying root
to anything falsey during the loop body, this will always run forever if root
was not None
to start with. 由于您没有在循环体中将root
修改为任何假,因此如果root
并非以None
为开头,它将始终永远运行。
I think you want that line to be if root
instead. 我想您希望该行成为if root
。 This way you'll run the block either zero (base case) or one times (recursive case): 这样,您将以零(基本情况)或一次(递归情况)运行块:
def preOrderTraversal(root):
if root:
print root.value
preOrderTraversal(root.left)
preOrderTraversal(root.right)
You don't need parentheses around the condition of an if
or while
statement. 您不需要在if
或while
语句的条件之间加上括号。 You also don't need any of the semicolons you're putting at the end of your lines. 您也不需要在行尾添加任何分号。 You may want to read PEP 8 which is a style-guide for Python code. 您可能需要阅读PEP 8 ,这是Python代码的样式指南。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.