给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
第一次的代码:
递归,直接返回左+中+右,当到达最左叶子时,它就是作为第一个root开始返回
def twomid(tree):
if tree==None:
return []
root=tree.val
left=twomid(tree.left)
right=twomid(tree.right)
return left+[root]+right
return twomid(root)
28ms,排名23%
第二次代码:
迭代,首先先达到root的最左端None的位置,用temp记录经过所有节点,然后开始temp出栈,得到左端叶子的值,并加入列表ans,接着访问叶子的right,若为空,temp继续出栈,得到叶子的上一个节点,以此类推,最后temp为空,并且此时达到最右端叶子
temp=[]
ans=[]
while root or temp:
if root: #只要节点非空
temp.append(root) #这里要加入的是树,不是树的值
root=root.left
else:
root=temp.pop()
ans.append(root.val) #树才有val和right
root=root.right #左节点寻找完毕
return ans
24ms,排名99.89%
版权声明:本文为weixin_44033136原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。