简体   繁体   English

Python递归方法中的PreOrder遍历

[英]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. 您不需要在ifwhile语句的条件之间加上括号。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM