通过二叉树的中序序列和后序序列获取前序序列
Posted orzt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过二叉树的中序序列和后序序列获取前序序列相关的知识,希望对你有一定的参考价值。
二叉树的遍历方式常见的三种是:先序遍历(ABC)、中序遍历(BAC)、后序遍历(BCA)
先序遍历:
若二叉树为空,则空操作;否则:
- 访问根结点;
- 先序遍历左子树;
- 先序遍历右子树。
中序遍历:
若二叉树为空,则空操作;否则:
- 中序遍历左子树;
- 访问根结点;
- 中序遍历右子树。
后序遍历:
若二叉树为空,则空操作;否则:
- 后序遍历左子树;
- 后序遍历右子树;
- 访问根结点。
在学习到 根据遍历序列确定二叉树 时,知道了:可以通过二叉树的先中或者中后遍历序列唯一确定一棵二叉树。
根据算法描述 使用java 码出依据中后遍历序列来获取先序遍历序列的代码:
1 package learn.normalcode; 2 3 import java.util.ArrayList; 4 5 public class BlankD 6 public static ArrayList<Character> ansList = new ArrayList<>(11); 7 //通过二叉树的中序序列和后序序列获取前序序列 8 public static void getAns(String middle, String back) 9 //后序序列的最后一个结点为根结点 10 int backLength = back.length(), middleLength = middle.length(); 11 char c = ‘#‘; 12 if (backLength > 0) 13 c = back.charAt(backLength - 1); 14 ansList.add(c); 15 16 //从中/后序序列中分裂出左右子树的中/后序序列 17 int indexOfRoot = middle.indexOf(c); 18 getAns(middle.substring(0, indexOfRoot), back.substring(0, indexOfRoot)); 19 getAns(middle.substring(indexOfRoot + 1, middleLength), back.substring(indexOfRoot, backLength - 1)); 20 21 return; 22 23 24 public static void main(String[] args) 25 String middle = "SMBDCEAFHG", back = "MSDECBHGFA"; 26 getAns(middle, back); 27 System.out.println(ansList); 28 29 ansList.clear(); 30 middle = "DCBA"; 31 back = "DCBA"; 32 getAns(middle, back); 33 System.out.println(ansList); 34 35 ansList.clear(); 36 middle = "SMBDCEA"; 37 back = "MSDECBA"; 38 getAns(middle, back); 39 System.out.println(ansList); 40 41
以上是关于通过二叉树的中序序列和后序序列获取前序序列的主要内容,如果未能解决你的问题,请参考以下文章
已知一棵二叉树的中序和前序序列如下,求该二叉树的后序序列,并画出二叉树
已知二叉树的先序序列和中序序列怎么求后序序列?不是基于C++的,要在TC环境下能运行的,各位能人帮帮忙吧