Convert BST to Greater Tree
来源:互联网 发布:sql增删改查面试题 编辑:程序博客网 时间:2024/06/05 08:22
1.Binary Search Tree:也称二叉搜索树、二叉查找树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树:
若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
任意节点的左、右子树也分别为二叉查找树;
没有键值相等的节点。
2.题意:给定一个搜索树,每一个键值变为原来键值与比它大的键值相加的和,并没有说明需要是有线连接的键值。
思路:首先用一种合适的存储方式,然后遍历树,比较大小,用一个变量sum来记录比它大的同时相加。
题目里给出了二叉树节点的定义,其中包含了左孩子和右孩子的信息。这就是我所说的存储方式,这样的说法可能不准确
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
接下来是要遍历树
3.有个问题:既然是搜索树,就说明左孩子一定比根节点小,右孩子一定比根节点大,
那根节点就一定会变成右孩子和根节点的和,
而左孩子一定比根节点和右孩子都小,也就是左孩子一定会变成根节点和左右孩子的和,而右孩子一定不变。
回答:初始化的时候肯定是None,因为左右孩子要做为根节点初始化的时候才会赋值。
7.self究竟是什么意思?继承?方法?对象?
代表类的实例 对象自己
廖雪峰 类和实例
多态:既是子类也是父类
属性?self.name name 就是属性
8.终于弄明白:
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
root=TreeNode(5) 因为 __init__前后两个下划线的命名方法表示这是个特殊方法,需要把参数带上
print(root.val,root.left,root.right)
9.其实这个算法是做了一次树的遍历 ‘’右根左‘’的规则
class Solution(object):
def convertBST(self, root):
self.val = 0
def visit(root):这里为啥不需要self了?因为self是类的实例,这个方法的定义在convertBST里面了,convertBST的定义中第一个参数是self
if root:
visit(root.right)
root.val += self.val
self.val = root.val
visit(root.left)
visit(root)
return root
注:这里的self.val就是我所说的算法里的sum
若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
任意节点的左、右子树也分别为二叉查找树;
没有键值相等的节点。
2.题意:给定一个搜索树,每一个键值变为原来键值与比它大的键值相加的和,并没有说明需要是有线连接的键值。
思路:首先用一种合适的存储方式,然后遍历树,比较大小,用一个变量sum来记录比它大的同时相加。
题目里给出了二叉树节点的定义,其中包含了左孩子和右孩子的信息。这就是我所说的存储方式,这样的说法可能不准确
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
接下来是要遍历树
3.有个问题:既然是搜索树,就说明左孩子一定比根节点小,右孩子一定比根节点大,
那根节点就一定会变成右孩子和根节点的和,
而左孩子一定比根节点和右孩子都小,也就是左孩子一定会变成根节点和左右孩子的和,而右孩子一定不变。
那就不用比较大小了????
回答:这样是没错的,直接找最右边的叶节点赋值给sum,保持此节点值不变,然后其根节点变为原值+sum,更新sum,然后左节点变为原值+sum,更新sum,按照这个规则就可以把所有节点给赋值。
4.不清楚应该返回什么?对这个二叉树节点的定义不是很明白···
回答:定义一棵二叉树,三个点,然后再用左节点定义二叉树,右节点也定义一棵二叉树,如此便生成了一棵包含很多节点的树。返回root就是返回整棵树咯。
5.返回三个节点的值?初始化中左右孩子都是None ?回答:初始化的时候肯定是None,因为左右孩子要做为根节点初始化的时候才会赋值。
6.error:TreeNode是一种类型 不能像int一样进行相加的运算
回答:root.val以及root.left.val才是值,可以进行相加。7.self究竟是什么意思?继承?方法?对象?
代表类的实例 对象自己
回答:
http://python.jobbole.com/81921/
https://sjolzy.cn/Why-should-self-Python.html
https://stackoverflow.com/questions/2709821/what-is-the-purpose-of-self廖雪峰 类和实例
多态:既是子类也是父类
属性?self.name name 就是属性
8.终于弄明白:
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
root=TreeNode(5) 因为 __init__前后两个下划线的命名方法表示这是个特殊方法,需要把参数带上
print(root.val,root.left,root.right)
9.其实这个算法是做了一次树的遍历 ‘’右根左‘’的规则
class Solution(object):
def convertBST(self, root):
self.val = 0
def visit(root):这里为啥不需要self了?因为self是类的实例,这个方法的定义在convertBST里面了,convertBST的定义中第一个参数是self
if root:
visit(root.right)
root.val += self.val
self.val = root.val
visit(root.left)
visit(root)
return root
注:这里的self.val就是我所说的算法里的sum
10.还未想通的这个程序
def convertBST(self, root):
def reverse(root):
return reverse(root.right) + [root] + reverse(root.left) if root else []
for a, b in zip(reverse(root), reverse(root)[1:]):
b.val += a.val
return root
时隔一周,继续思考~上周太忙啦!
print([1,2]+[3,4]) 结果是[1,2,3,4]
有没有热情的小伙伴可以给解释一下~?
阅读全文
0 0
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- convert bst to greater tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Convert BST to Greater Tree
- Android版本更新
- -bash: fork: Cannot allocate memory 问题的处理
- ajax交互成功后数据返回到error方法中 (前端/PHP)
- 2017-11-08
- low rank读书笔记
- Convert BST to Greater Tree
- TP事物-不可缺少的操作
- MySQL存储过程和函数详细定义
- mysql数据库字符处理函数
- php-使用哈希对象缓存
- mysql数据库转sqlite.db数据库
- 深入理解Servlet
- 手把手教你使用Systrace(一)
- JavaScript学习笔记_尾调用优化