Python 二叉树有序遍历
我写了这样一个解决方案 但并没有如预期的那样起作用Python 二叉树有序遍历,python,algorithm,Python,Algorithm,我写了这样一个解决方案 但并没有如预期的那样起作用 Finished Runtime: 48 ms Your input [1,null,2,3] Output [1] Expected [1,3,2] 我的解决方案有什么问题?当您使用tree编写代码时,解决方案经常使用递归。在您的情况下,您搜索的代码可能是: def inorderTraversal(根目录): 结果=[] 如果root.left!=无: 扩展结果(inorderTraversal(root.left)) result
Finished
Runtime: 48 ms
Your input [1,null,2,3]
Output [1]
Expected [1,3,2]
我的解决方案有什么问题?当您使用tree编写代码时,解决方案经常使用递归。在您的情况下,您搜索的代码可能是:
def inorderTraversal(根目录):
结果=[]
如果root.left!=无:
扩展结果(inorderTraversal(root.left))
result.append(root.val)
如果root.right!=无:
扩展结果(inorderTraversal(root.right))
返回结果
如果不清楚,请询问我,我将增加更高的精度当您使用tree编写代码时,解决方案通常是使用递归,在您的情况下,您搜索的代码将是:
def inorderTraversal(根目录):
结果=[]
如果root.left!=无:
扩展结果(inorderTraversal(root.left))
result.append(root.val)
如果root.right!=无:
扩展结果(inorderTraversal(root.right))
返回结果
如果不清楚,请询问我,我将增加精度您的解决方案存在以下问题:
- 如果没有左图,则打印节点并从子树返回,而不向右
- 如果你有一个左键,你可以附加它。这可能会导致无限循环(当您从左侧返回时,将再次附加它)
- 如果没有左边的节点,请打印节点,然后将右边的节点放在堆栈上
- 如果您有一个left,请将left放在堆栈上,并从TreeNode中删除left指针,这样在返回时就不会再添加它了
- 一直向左走,将沿途的所有节点放在堆栈上
- 从堆栈中删除节点时,请打印它,向右移动,然后一直向左移动,将所有节点放在堆栈上
def inorderTraversal(self, root: "TreeNode") -> "List[int]":
stack, res = [root], []
cur = stack[-1]
while cur.left != None:
stack.append(cur.left)
cur = cur.left
while stack:
cur = stack.pop()
res.append(cur.val)
if cur.right != None:
stack.append(cur.right)
cur = cur.right
while cur.left != None:
stack.append(cur.left)
cur = cur.left
return res
您的解决方案存在以下问题:
- 如果没有左图,则打印节点并从子树返回,而不向右
- 如果你有一个左键,你可以附加它。这可能会导致无限循环(当您从左侧返回时,将再次附加它)
- 如果没有左边的节点,请打印节点,然后将右边的节点放在堆栈上
- 如果您有一个left,请将left放在堆栈上,并从TreeNode中删除left指针,这样在返回时就不会再添加它了
- 一直向左走,将沿途的所有节点放在堆栈上
- 从堆栈中删除节点时,请打印它,向右移动,然后一直向左移动,将所有节点放在堆栈上
def inorderTraversal(self, root: "TreeNode") -> "List[int]":
stack, res = [root], []
cur = stack[-1]
while cur.left != None:
stack.append(cur.left)
cur = cur.left
while stack:
cur = stack.pop()
res.append(cur.val)
if cur.right != None:
stack.append(cur.right)
cur = cur.right
while cur.left != None:
stack.append(cur.left)
cur = cur.left
return res
一个在这里,如果你把它和你的比较,你试过调试吗?您的发现是什么?这里有一个,如果您将其与您的进行比较,您是否尝试过调试?你的发现是什么?