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;
}