树专题
树的结构和链表相似,不同的是它多了一个指针。为了区分两个指针,将其分别叫做指向左子树的指针和指向右子树的指针。
拥有两个指针,可能多完成很多功能,可以用来很好地存储元素并完成元素的查找和更改。c++中使用的红黑树即为普通树的增强版。
树的遍历
在树的前、中、后序遍历过程中,都将介绍递归和非递归的两种方式。
其中非递归方式介绍模板方法,有套路可寻,此可以当做工具使用
递归方法
树的前序遍历
前序遍历的顺序为“根左右”,即可以将树分为:
[根节点,左子树,右子树]。
- 前序遍历的递归方法
class Solution:
def preorderTraversal(self, root):
# 根,左,右
result = []
if root is None:
return result
return self.preorderHelper(root, result)
def preorderHelper(self, root, result):
if root is None:
return
result.append(root.val)
self.preorderHelper(root.left, result)
self.preorderHelper(root.right, result)
return result
树的中序遍历
中序遍历的顺序为“左根右”,即可以将树分为:
[左子树,根节点,右子树]。
- 中序遍历的递归方法
class Solution:
def inorderTraversal(self, root):
# 左,根,右
result = []
if root is None:
return result
return self.inorderHelper(root, result)
def