1、题目描述:求先序序列(ABCDEFGHI)和中序序列(BCAEDGHFI)所确定的一个二叉树
解题思路:
首先,由先序序列可知A为二叉树的根节点。中序序列中A之前的BC为左子树的中序序列,EDGHFI为右子树的中序序列。然后由先序序列可知B是左子树的根节点,D是右子树的根节点。依次列退,就能将剩下的节点全部分解下去,最后得到二叉树如图(c)
public class 由遍历序列构造二叉树 {
public static void main(String [] args){
String f = "ABCDEFGHI";
String z = "BCAEDGHFI";
TreeNodeStr root = rebuildTree(f,z);
System.out.println("a");
}
public static TreeNodeStr rebuildTree(String fString, String zString){
if (fString != null && !"".equals(fString) && zString != null && !"".equals(zString)){
String [] str = fString.split("");
TreeNodeStr root = new TreeNodeStr(str[0]);
//获取root的左节点
int temp = zString.indexOf(str[0]);
String zLeft = zString.substring(0,temp);
String zRight = zString.substring(temp+1);
String fLeft = fString.substring(1,temp+1);
String fRight = fString.substring(temp+1);
root.left = rebuildTree(fLeft,zLeft);
root.right = rebuildTree(fRight,zRight);
return root;
}else {
return null;
}
}
//
}
class TreeNodeStr{
String val = null;
TreeNodeStr left = null;
TreeNodeStr right = null;
public TreeNodeStr(String val) {
this.val = val;
}