671. Second Minimum Node In a Binary Tree
来源:互联网 发布:开淘宝需要多少保证金 编辑:程序博客网 时间:2024/06/11 06:26
题目详情:https://leetcode.com/problems/second-minimum-node-in-a-binary-tree/description/
暴力破解,管它什么特征呢
# -*- coding:utf-8 -*-class Solution(object): def inOrder(self,root):#中序遍历保存访问的序列 if root: self.inOrder(root.left) self.inSqe.append(root.val) self.inOrder(root.right) def findSecondMinimumValue(self, root):#暴力破解 """ :type root: TreeNode :rtype: int """ self.inSqe=[]#用以保存中序遍历的序列 self.inOrder(root)#中序遍历 self.inSqe.sort()#排序,必须得排序,没有说右子树的元素大于左子树 first=self.inSqe[0] for e in self.inSqe: if first!=e:#找到和第一个元素不同的元素则停止 return e#并返回该元素 return -1
下面的代码利用了该树中的一些特征进行求解
1、如果树的结构如图所示,即左、右子树的值都比根节点的值大,那么第二小的值一定为左、右子树的值
2、如果树的结构如图所示,即左子树的值和根节点的相同,右子树的值和根节点的值不同,那么需要到左子树上去找可能存在的第二小值
3、如果树的结构如图所示,即右子树的值和根节点相同,左子树的值和根节点的值不同;那么需要到右子树上去查找可能存在的第二小值,不需要到左子树上去找,因为左子树上值都大于等于以3为根节点的值
代码表达如下:
# -*- coding:utf-8 -*-# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object): def findSecond(self,root,first): if root.left and root.right:#左右子树都存在的情况 leftVal,rightVal=root.left.val,root.right.val if root.left.val!=first and root.right.val!=first:#值都不相同的时候 return min(root.left.val,root.right.val)#则直接返回左,右子树中的较小值 if root.left.val==first:#左子树的值等于根节点的值,那么第二小的值可能出现在左子树 leftVal=self.findSecond(root.left,first) if root.right.val==first:#右子树的值等于根节点的值,那么第二小的值也可能出现在右子树上 rightVal=self.findSecond(root.right,first) #print leftVal,rightVal if leftVal==-1 and rightVal==-1:#如果左子树和右子树上的第二小的元素都不存在 return -1#那么返回-1 elif leftVal==-1:#执行到这,说明左子树和右子树上第二小的元素至少存在一个 return rightVal#左子树的“第二小的元素”不存在,那么返回右子树”第二小元素“ elif rightVal==-1:#右子树”第二小“的元素不存在,那么返回左子树”第二小“的元素 return leftVal else:#都不等于-1的时候 return min(leftVal,rightVal)#则返回两者的较小值 return -1#左右子树都为空的时候,则返回没有找到的标志 def findSecondMinimumValue(self, root): """: type root: TreeNode :rtype: int """ if root.left==None:#只有一个节点 return -1#则直接返回-1 return self.findSecond(root,root.val)
阅读全文
0 0
- 671. Second Minimum Node In a Binary Tree
- leetcode 671. Second Minimum Node In a Binary Tree
- 671. Second Minimum Node In a Binary Tree
- leetcode 671. Second Minimum Node In a Binary Tree
- leetcode 671. Second Minimum Node In a Binary Tree
- 671. Second Minimum Node In a Binary Tree
- 671. Second Minimum Node In a Binary Tree
- 671. Second Minimum Node In a Binary Tree
- LeetCode 671. Second Minimum Node In a Binary Tree
- 671. Second Minimum Node In a Binary Tree
- 671. Second Minimum Node In a Binary Tree
- 671. Second Minimum Node In a Binary Tree
- Second Minimum Node In a Binary Tree问题及解法
- Leetcode671. Second Minimum Node In a Binary Tree
- [LeetCode] Second Minimum Node In a Binary Tree
- LeetCode#671 Second Minimum Node In a Binary Tree (week13)
- LeetCode671. Second Minimum Node In a Binary Tree
- leetcode 671. Second Minimum Node In a Binary Tree 第二小数字 + 深度优先遍历DFS
- Python之嵌套
- C语言几项主要的调用惯例
- bzoj1019: [SHOI2008]汉诺塔
- 操作过程挺繁琐
- 【CCF201709-1打酱油】C++代码实现
- 671. Second Minimum Node In a Binary Tree
- Student List for Course
- 第一次机房收费系统-多步OLE DB操作产生错误
- NOIP2017题解
- 指针,指针,快过来。
- 718. Maximum Length of Repeated Subarray
- AnyMP4 Blu-ray Player(蓝光高清视频播放器)官方正式版V6.3.12下载 | AnyMP4 Blu-ray Player破解版
- 用迭代器实现斐波那契数列
- 模拟实现strcat函数