Given a binary tree, return the inorder traversal of its nodes' values.
Example:
Input: [1,null,2,3]
1
\
2
/
3
Output: [1,3,2]
中序遍历.如果忘了的话参考https://blog.youkuaiyun.com/zl6481033/article/details/81009388
最开始的想法是用递归方式,如下(无法通过),但是这样每次调用自己的时候都会res=[].
试了global res,但是测试多个样例时候不会更新,导致报错.
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res=[]
if root is None:return root
if root:
self.inorderTraversal(root.left)
res.append(root.val)
self.inorderTraversal(root.right)
return res
然后看discuss,写了一个辅助的函数才最终通过. 这样就可以把数组里的值一直传递下去.
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = []
return self.iter(root,res)
def iter(self, root, res):
if root is None:return root
if root:
self.iter(root.left, res)
res.append(root.val)
self.iter(root.right, res)
return res
还有就是用迭代的方式,思路也比较简单.
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = list()
stack = list()
while root or stack:
if root:
stack.append(root)
root = root.left
else:
temp = stack.pop()
res.append(temp.val)
root = temp.right
return res