色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java已知前序和中序求后序

傅智翔1年前8瀏覽0評論

在java中已知前序和中序求后序的問題是一道經(jīng)典的二叉樹問題。一般來說,前序和中序都可以唯一的確定一個二叉樹,通過對于前序和中序進(jìn)行分析,我們可以得出二叉樹的后序遍歷。

public String getPostOrder(int[] preorder, int[] inorder) {
if (preorder == null || inorder == null || preorder.length != inorder.length || inorder.length == 0) {
return null;
}
int rootValue = preorder[0];
int rootIndex = -1;
for (int i = 0; i< inorder.length; i++) {
if (inorder[i] == rootValue) {
rootIndex = i;
break;
}
}
if (rootIndex == -1) {
return null;
}
int[] leftInorder = Arrays.copyOfRange(inorder, 0, rootIndex);
int[] rightInorder = Arrays.copyOfRange(inorder, rootIndex + 1, inorder.length);
int[] leftPreorder = Arrays.copyOfRange(preorder, 1, rootIndex + 1);
int[] rightPreorder = Arrays.copyOfRange(preorder, rootIndex + 1, preorder.length);
String leftPostOrder = getPostOrder(leftPreorder, leftInorder);
String rightPostOrder = getPostOrder(rightPreorder, rightInorder);
StringBuilder postOrder = new StringBuilder();
postOrder.append(leftPostOrder);
postOrder.append(rightPostOrder);
postOrder.append(rootValue);
return postOrder.toString();
}

在這段代碼中,我們使用了分治的思想來實(shí)現(xiàn)此問題,首先我們找到前序遍歷的第一個節(jié)點(diǎn)就是樹的根節(jié)點(diǎn),接著我們在中序遍歷中找到根節(jié)點(diǎn)的位置。根據(jù)根節(jié)點(diǎn)的位置,我們就可以得到左子樹和右子樹的前序和中序遍歷順序,接著我們遞歸的求解左子樹和右子樹的后序遍歷順序,最終將左子樹的后序遍歷、右子樹的后序遍歷和根節(jié)點(diǎn)的值相連接,就可以得到整個樹的后序遍歷順序。