1448. 统计二叉树中好节点的数目
题目描述
解题思路
1、方法一:先序遍历,max_val:截止到当前节点前的路径中的最大值
2、方法二:回溯法
代码实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def goodNodes(self, root: TreeNode) -> int:
# 先序遍历,max_val:截止到当前节点前的路径中的最大值
self.res = 0
def find(root, max_val):
if not root:
return
if max_val <= root.val:
self.res += 1
max_val = max(max_val, root.val)
find(root.left, max_val)
find(root.right, max_val)
find(root, float("-inf"))
return self.res
def goodNodes1(self, root: TreeNode) -> int:
# 回溯法
self.seq = []
self.res = 0
def preorder(root):
if not root:
return
self.seq.append(root.val)
if is_good_node(self.seq):
self.res += 1
preorder(root.left)
preorder(root.right)
self.seq.pop()
def is_good_node(seq: List[int]) -> int:
if not seq:
return
compare = [val <= seq[-1] for val in seq[:-1]]
return all(compare)
preorder(root)
return self.res