二叉树是一种非常重要的数据结构,很多数据结构是以根据二叉树来进行演化的。现在我们先介绍二叉树的遍历,有深度遍历和广度遍历(也就是平常说的层次遍历),深度遍历有前序、中序以及后序三种遍历方法。因为数的定义本身就是递归定义,因此采用递归的方法实现树的三种遍历不仅容易理解而且代码很简洁,对于层次遍历,需要其他数据结构的支撑,比如堆。
四种主要的遍历思想:
前序遍历:根结点 —> 左子树 —> 右子树
中序遍历:左子树—> 根结点 —> 右子树
后序遍历:左子树 —> 右子树 —> 根结点
层次遍历:只需按层次遍历即可
例如,求下面二叉树的各种遍历
前序遍历:12457836
中序遍历:42758136
后序遍历:47852631
层次遍历:12345678
参考链接:https://blog.csdn.net/My_Jobs/article/details/43451187
98
总结:
虽然还没结束,但是收获确实很大,通过这几天的学习,发现自己有很多不是很清楚,知识点可能还好。不过更多的是没想到python还有这个语法,所以有些时候看discussion的时候,就很难理解。不过总的来说成长真的蛮大的。
下面是我看discussion的答案,由于有些python的语法不知道,所以还不能理解。可是现在时间确实很紧,还没一一对照了解。
class Solution:
def isValidBST(self, root, left = float('-inf'), right = float('inf')):
"""
:type root: TreeNode
:rtype: bool
"""
if not root:
return True
if root.val <= left or root.val >= right:
return False
# in the left branch, root is the new ceiling; contrarily root is the new floor in right branch
return self.isValidBST(root.left, left, root.val) and self.isValidBST(root.right, root.val, right)
if not root:
return []
q = []
q.append(root)
final = []
while q:
l = len(q)
ans =[]
for i in range(l):
pop =q.pop(0)
ans.append(pop.val)
if pop.left:
q.append(pop.left)
if pop.right:
q.append(pop.right)
final.append(ans)
return final
q=[]
level = 0
q.append((root,level))
res =[]
pre = -1
tmp=[]
if root is None :
return []
while (q) :
x,level = q.pop(0)
if level == pre :
tmp.append(x.val)
else:
if len(tmp)>0:
res.append(tmp)
tmp=[]
tmp.append(x.val)
pre =level
level=level+1
if x.left :
q.append((x.left,level))
if x.right :
q.append((x.right,level))
if len(tmp) > 0 :
res.append(tmp)
return res[::-1]