解题思路:采用两个栈交替出入每一层结点,并使用临时列表存储出栈的节点,当前栈为空时,将临时列表存入最终列表中。
class Solution:
def Print(self , pRoot: TreeNode) -> List[List[int]]:
# write code
if not pRoot:
return []
stack1 = [pRoot]
stack2 = []
res = []
#只要有一个栈存在元素,就进行栈的弹出
while stack1 or stack2:
tmp_res = []
if stack1:
while stack1:
#弹出栈顶元素
tmp = stack1.pop()
tmp_res.append(tmp.val)
if tmp.left:
stack2.append(tmp.left)
if tmp.right:
stack2.append(tmp.right)
else:
while stack2:
tmp = stack2.pop()
tmp_res.append(tmp.val)
if tmp.right:
stack1.append(tmp.right)
if tmp.left:
stack1.append(tmp.left)
#判断最后一层叶子节点,叶子节点没有孩子,故最后一层为空可以忽略
if tmp_res:
res.append(tmp_res)
return res