碎碎念
好像断更了,但没关係,跟我一起挑战的朋友有持续下去的样子。
今天也是一个跟阅读测验斗智斗勇的题目,而且最后搞出来的程式码大概40行
你真的是easy题目吗......
题干
返回二元树中最常出现的数字,二元树的规则是左边小于等于,右边大于等于。
解题思路
看起来是不难,但问题是我对于这个资料结构很陌生......所以基本上都是叫AI来搞定。
现在我知道我那个朋友昨天说的:「管科的跑来修完资结之后都会很颓丧」的那种感觉,虽然我不是管科就是了。
原本我是叫AI直接扁平化然后数数字,但后来想想其实也不用,直接历遍应该也是没问题。而且他还找了一个酷酷的历遍方式。
# 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 = rightclass Solution: def findMode(self, root: Optional[TreeNode]) -> List[int]: if not root: return [] # 初始化相关变量 self.prev_val = None self.current_count = 0 self.max_count = 0 self.modes = [] # 中序遍历函数 def inorder(node): if not node: return inorder(node.left) # 更新当前数字出现次数 if self.prev_val == node.val: self.current_count += 1 else: self.current_count = 1 self.prev_val = node.val # 检查是否需要更新模式列表 if self.current_count == self.max_count: self.modes.append(node.val) elif self.current_count > self.max_count: self.max_count = self.current_count self.modes = [node.val] inorder(node.right) # 执行中序遍历 inorder(root) return self.modes