链表的角度看待二叉树

链表的角度看待二叉树

  • 链表节点的本质就是一种带“一个同类指针”的对象。

  • 二叉树节点的本质就是一种带“两个同类指针”的对象。

  • 为了不干扰我们对核心问题的研究。不考虑“不允许环形指向”这个约束。

  • 我们很少为链表建立栈实现遍历,因为专门为链表建立辅助栈的利用率不高,容易造成空间O(n)的浪费。

  • 而我们经常会为二叉树,建立辅助栈,辅助栈的长度等于数的深度。

  • 我们可以把二叉树看成多个分叉的链表。我们可以把树中的任意一个节点看作是链表的终点值。把根看作链表的起点值。尤其是利用迭代法实现二叉树的遍历时。

  • 我们最好站在节点的视角来编程,而不是链表结构或者树形结构的角度。因为无论是迭代算法还是递归算法,我们处理的对象都是节点,而不是树或者链表集合。我们通常是“对节点递归”,而不是“对树递归”。

  • 如果是迭代链表节点,当前节点有3个去处,1.处理当前值,2.利用pre指针访问前节点(或者利用栈),3.访问next节点。

  • 如果是迭代二叉树节点,当前节点有4个去处,1.处理当前值,2.利用栈访问前节点(pre指针区分来源,是左子节点还是右子节点)。3.访问左子节点,4,访问右子节点。

  • 其实整个递推回溯过程乍一看有点像动态规划。递推就好像在为初始化回溯过程做准备。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章