直观思路,层序遍历,每层的第一个节点就是最左,取最后一层的第一个就行
from collections import deque
class Solution:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
que = deque()
que.append(root)
while que:
for i in range(len(que)):
node = que.popleft()
if i == 0:
self.res = node.val
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
return self.res
递归法:
中序遍历,向左是优先的(即左端的节点总是先被遍历到)
class Solution:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
self.res = 0
self.maxDepth = 0
def inorder_traversal(node, depth):
if not node:
return
inorder_traversal(node.left, depth+1)
#将深度作为递归函数的参数传递,一旦遇到更大深度的节点,就更新信息
#这个更新的节点一定是左端节点,因为采用的是中序遍历,左节点总是被优先遍历到
if depth > self.maxDepth:
self.maxDepth = depth
self.res = node.val
inorder_traversal(node.right, depth+1)
inorder_traversal(root, 1)
return self.res