package tree;
/**
* User: ZhangQi
* Date: 2019/3/18
* Time: 10:22
* Desc: 二叉树结点类
*/
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val) {
this.val = val;
}
public int getVal() {
return val;
}
}
根据前序遍历和中序遍历重建二叉树
package tree;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
/**
* User: ZhangQi
* Date: 2019/3/18
* Time: 10:22
* Desc: 根据前序遍历和中序遍历重建二叉树
*/
public class CreateBinaryTree {
/**
* @param pre {1,2,4,7,3,5,6,8}
* @param in {4,7,2,1,5,3,8,6}
* @return
*/
public TreeNode reCreateBinaryTree(int[] pre, int[] in) {
if (pre == null || in == null) return null;
List<Integer> preList = new ArrayList<>(pre.length);
for (int i : pre) {
preList.add(i);
}
List<Integer> inList = new ArrayList<>(in.length);
for (int i : in) {
inList.add(i);
}
TreeNode treeNode = createBinaryTree(preList, inList);
return treeNode;
}
private TreeNode createBinaryTree(List<Integer> preList, List<Integer> inList) {
if (preList == null || preList.size() == 0) return null;
int val = preList.get(0);
TreeNode root = new TreeNode(val);
int index = inList.indexOf(val);
List leftInList = inList.subList(0, index);
List rightInList = inList.subList(index + 1, inList.size());
List leftPreList = preList.subList(1, index + 1);
List rigthPreList = preList.subList(index + 1, preList.size());
root.left = createBinaryTree(leftPreList, leftInList);
root.right = createBinaryTree(rigthPreList, rightInList);
return root;
}
public static void main(String[] args) {
BigInteger d = null;
long size = d==null ? 0 : d.longValue();
System.out.println(size);
CreateBinaryTree tree = new CreateBinaryTree();
int[] pre = {5, 3, 2, 4, 7, 6, 8};
int[] in = {2, 3, 4, 5, 6, 7, 8};
TreeNode treeNode = tree.reCreateBinaryTree(pre, in);
tree.prTree(treeNode);
System.out.println();
tree.inTree(treeNode);
System.out.println();
tree.listTree(treeNode);
}
/** 中序遍历 */
private void inTree(TreeNode treeNode) {
if (treeNode == null) return;
inTree(treeNode.left);
System.out.print(treeNode.getVal());
System.out.print(" ");
inTree(treeNode.right);
}
/** 前序遍历 */
private void prTree(TreeNode treeNode) {
if (treeNode == null) return;
System.out.print(treeNode.getVal());
System.out.print(" ");
prTree(treeNode.left);
prTree(treeNode.right);
}
/** 后序遍历 */
private void listTree(TreeNode treeNode) {
if (treeNode == null) return;
listTree(treeNode.left);
listTree(treeNode.right);
System.out.print(treeNode.getVal());
System.out.print(" ");
}
}