简介:
二叉树的应用十分广泛。根据二叉树的前序序列和中序序列,可以构造出二叉树。构造方法可以采用递归和非递归。二叉树的遍历通常有四种方法,分别是前序遍历,中序遍历,后序遍历,层序遍历。其中,前序,中序,后序又有递归和非递归两种写法。求最近公共祖先的方法同样有很多。这里选择了一种时间、空间复杂度较低的方法。
本文主要分为以下几个部分:
-
递归与非递归建树
-
不同方式的遍历
-
寻找最近公共父节点
正文:
-
建树
-
递归
-
每次搜到中序序列中当前节点的位置,以此位置为界,将中序序列中的区间一分为二,然后分别传给左、右子树进行递归。
-
-
非递归
-
栈中存储当前节点的子树区间(L与R)以及他们的父节点(即当前节点)。
每次循环,将栈顶元素出栈,先找到当前元素在中序序列中的位置,然后根据对应的区间,将左右子树的区间入栈。
直到栈空为止。
注意:
应该先让右子树入栈,再让左子树入栈,保证顺序的正确。