Find Mode in Binary Search Tree
2017-08-15 00:27
417 查看
题目详情:https://leetcode.com/problems/find-mode-in-binary-search-tree/description/
自己写的代码:
根据提示写出来的代码,本题是中序遍历,又因为是BST,所以中序遍历的结果是有序的。设置一个preNode变量存储前一个遍历的节点,以便和当前访问的节点比较,前一个节点的值和当前节点的值相等,则将计数变量加1;不相等的话,说明是一个新的数字,则需要重新计数。然后和已知的出现的最大的次数比较,如果某个数出现的次数较多,则更新出现的最多的次数,并更新结果集。
语言差异:
我用python写的,int和TreeNode变量值的改变都无法同时更新,即都当作为基本的变量。所以被迫使用了list,比如:count=[1],max=[0]。
自己写的代码:
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def findMode(self, root): """ :type root: TreeNode :rtype: List[int] """ d={} result=[] Max=0 self.postOrder(root,d) print d for k in d:#挑选出出现次数最多的值 if d[k]>Max: Max=d[k] result=[k] elif d[k]==Max: result.append(k) return result def postOrder(self,root,d): if root: self.postOrder(root.left,d) self.postOrder(root.right,d) d[root.val]=d.get(root.val,0)+1#统计值出现的次数
根据提示写出来的代码,本题是中序遍历,又因为是BST,所以中序遍历的结果是有序的。设置一个preNode变量存储前一个遍历的节点,以便和当前访问的节点比较,前一个节点的值和当前节点的值相等,则将计数变量加1;不相等的话,说明是一个新的数字,则需要重新计数。然后和已知的出现的最大的次数比较,如果某个数出现的次数较多,则更新出现的最多的次数,并更新结果集。
语言差异:
我用python写的,int和TreeNode变量值的改变都无法同时更新,即都当作为基本的变量。所以被迫使用了list,比如:count=[1],max=[0]。
class Solution(object): def findMode(self, root): """ :type root: TreeNode :rtype: List[int] """ if root==None:#为空直接返回 4000 return [] #preNode存储上一个访问的节点,result存储结果 #count用以计数,某个数字出现的次数,m为已知的某个数出现的最大次数 preNode,result,count,m=[None],[],[1],[0] self.inOrder(root,preNode,result,count,m) i=len(result)-1 while result[i]!=":": i-=1 return result[i+1:] def inOrder(self,root,preNode,result,count,m): if root!=None: self.inOrder(root.left,preNode,result,count,m) #该判断主要用于count计数 if preNode[0]!=None:#如果前一个节点不为None if preNode[0].val==root.val:#前一个节点和本节点的值相等 count[0]+=1#那么将count[0]的值加1 else:#如果前一个节点的值和本节点的值不相等,说明是新的一个数 count[0]=1#则重新计该数出现的次数 if count[0]>=m[0]: if count[0]>m[0]:#如果某个数出现的次数较多 result.append(":")#加上个标记。不为什么不写为result=[],因为这样result的地址就变了 result.append(root.val)#添加该数 m[0]=count[0]#更新出现的最大的次数 preNode[0]=root#更新访问过的前一个节点信息 self.inOrder(root.right,preNode,result,count,m)
相关文章推荐
- 501. Find Mode in Binary Search Tree
- Find Mode in Binary Search Tree
- Find Mode in Binary Search Tree:带重复元素的搜索二叉树Morris遍历查找频率最大的元素
- 501. Find Mode in Binary Search Tree#2
- 501. Find Mode in Binary Search Tree
- Find Mode in Binary Search Tree问题及解法
- Find Mode in Binary Search Tree
- LeetCode.501 Find Mode in Binary Search Tree
- Find mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree
- leetcode[Find Mode in Binary Search Tree]//待整理多种解法
- 501. Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree
- leetcode-501-Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree
- Find Mode in Binary Search Tree
- 【LeetCode】Find Mode in Binary Search Tree 解题报告
- Find Mode in Binary Search Tree
- Find Mode in Binary Search Tree
- 501. Find Mode in Binary Search Tree