打印二叉树最右侧节点其实是改自二叉树的层次遍历,多了一步,即输出每一层的末尾节点。如下题,输出最右侧节点结果应为 [3,20,7]。
首先看二叉树的层次遍历,使用队列(queue)来存储二叉树的节点,
具体代码层次遍历实现:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
list = []
if root is None:return list
queue = [root]
while queue:
cur = []
for i in range(len(queue)):
node = queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
cur.append(node.val)
list.append(cur)
return list
打印出二叉树最右侧节点:
# 打印二叉树最右节点
def printRightNode(self, root):
queue = [root]
list = []
while queue:
res = []
# 控制二叉树每层的节点
for i in range(len(queue)):
node = queue.pop(0)
if node.lchild:
queue.append(node.lchild)
if node.rchild:
queue.append(node.rchild)
res.append(node.key)
list.append(res)
ans = []
for i in list:
# 取每层最后一个节点即为最右节点
ans.append(i[-1])
print(ans)