【題目】
已知一棵二叉樹所有的節點值都不同,給定這棵樹正確的先序和中序陣列,不要重建整棵樹,而是通過這兩個陣列直接生成正確的後序陣列。
【基本思路】
根據當前的先序和中序陣列,設定後序陣列最右邊的值,然後劃分出左子樹的先序、中序陣列,以及右子樹的先序、中序陣列,先根據右子樹的劃分設定好後序陣列,再根據左子樹的劃分,從右邊到左邊依次設定好後序陣列的全部位置。
【**】
//通過先序和中序陣列生成後序陣列
public
static
int getposarray(int pre,int in)
int len=pre.length;
int pos=new
int[len];
hashmapmap=new hashmap();
for(int i=0;i0,len-1,in,0,len-1,pos,len-1,map);
return pos;
}//從右往左一次填好後序陣列s
//si為後序陣列s該填的位置
//返回值為s該填的下乙個位置
private
static
intsetpos(int p, int pi, int pj, int n, int ni, int nj,
int s, int si, hashmapmap)
s[si--]=p[pi];
int i=map.get(p[pi]);
si=setpos(p,pj-nj+i+1,pj,n,i+1,nj,s,si,map);
return setpos(p,pi+1,pi+i-ni,n,ni,i-1,s,si,map);
}//二叉樹節點間的最大距離問題
public
static
intmaxdistance(node head)
通過先序和中序陣列生成後序陣列
通過先序和中序陣列生成後序陣列 給出一棵二叉樹的先序和中序陣列,通過這兩個陣列直接生成正確的後序陣列。輸入描述 第一行乙個整數 n,表示二叉樹的大小。第二行 n 個整數 a i,表示二叉樹的先序遍歷陣列。第三行 n 個整數 b i,表示二叉樹的中序遍歷陣列。輸出描述 輸出一行 n 個整數表示二叉樹的...
先序 中序和後序陣列兩兩結合重構二叉樹
題目 已知一棵二叉樹的所有節點值都不同,給定這棵二叉樹正確的先序 中序和後序陣列。請分別用三個函式實現任意兩種陣列結合重構原來的二叉樹,並返回重構二叉樹的頭結點。public class preinposttobst public static node preintotree int pre,in...
已知先序和中序求後序或中序和後序求先序
首先介紹樹的三種遍歷方式的遍歷順序 先序遍歷 根 左子樹 右子樹 特點 第乙個元素為根 中序遍歷 左子樹 根 右子樹 特點 根的兩邊分別為左子樹和右子樹 後序遍歷 左子樹 右子樹 根 特點 最後乙個元素為根 有如下圖的二叉樹 其先序 中序 後序遍歷分別為 dbacegf abcdefg acbfge...