通過先序和中序陣列生成後序陣列

2021-08-19 18:21:20 字數 998 閱讀 7914

【題目】

已知一棵二叉樹所有的節點值都不同,給定這棵樹正確的先序和中序陣列,不要重建整棵樹,而是通過這兩個陣列直接生成正確的後序陣列。

【基本思路】

根據當前的先序和中序陣列,設定後序陣列最右邊的值,然後劃分出左子樹的先序、中序陣列,以及右子樹的先序、中序陣列,先根據右子樹的劃分設定好後序陣列,再根據左子樹的劃分,從右邊到左邊依次設定好後序陣列的全部位置。

【**】

//通過先序和中序陣列生成後序陣列

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...