04.バイナリツリーの再構築

タイトル

バイナリツリーのプレオーダートラバーサルとミッドオーダートラバーサルの結果を入力して、バイナリツリーを再構築してください。入力のプレオーダートラバーサルとミッドオーダートラバーサルの結果に重複した数値が含まれていないとします。たとえば、前順のトラバーサルシーケンス{1,2,4,7,3,5,6,8}と中順のトラバーサルシーケンス{4,7,2,1,5,3,8,6}を入力し、バイナリツリーを再構築して、戻る。

分析

二分木は、中次トラバーサルと前順トラバーサルに従って決定できます。具体的なプロセスは次のとおりです。

  1. プリアンブルに従ってルートノード(最初のノード)を決定する
  2. 中央シーケンスのルートノードの位置に従って、左サブツリーと右サブツリーに分割
  3. 同じ方法を使用して分解するために、左と右のサブツリーを別々に再帰します

プレオーダートラバーサル:
左右ルートトラバーサル:左ルートライト
ポストオーダートラバーサル:左右ルート

達成する

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
import java.util.Arrays;
public class Solution {
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        if(pre.length == 0 || in.length == 0){
            return null;
        }
        //根节点放入TreeNode中
        TreeNode treeNode = new TreeNode(pre[0]);
        //遍历中序遍历的数组 得到根节点下面的左子树和右子树
        for(int i = 0; i < in.length; i++){
            if(in[i] == pre[0]){
                //左子树递归
                treeNode.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i+1), Arrays.copyOfRange(in, 0, i));
                //右子树递归
                treeNode.right = reConstructBinaryTree(Arrays.copyOfRange(pre, i+1, pre.length), Arrays.copyOfRange(in, i + 1, in.length));
                //break;不用break,到了叶子节点,两边都是null,可以自动返回
            }
        }
        return treeNode;
    }
}

ArraysツールクラスのcopyOfRangeメソッドに注意してください。間隔は左から右に閉じています。

public static int [] copyOfRange(int [] original、int from、int to)
は、指定された配列の指定された範囲を新しい配列にコピーします。範囲の初期インデックス(from)は、0からoriginal.length(両端を含む)の間でなければなりません。元の[from]の値は、コピーの最初の要素に配置されます(from == original.lengthまたはfrom == toを除く)。元の配列の後続の要素の値は、コピーの後続の要素に配置されます。範囲の最後の(to)インデックス(from以上)は、original.lengthより大きくすることができます。この場合、0は、original.length-from以上のインデックスを持つコピーのすべての要素に配置されます。返される配列の長さはto-fromです。
パラメータ:
オリジナル-範囲のコピー元の配列-コピーされる範囲
の最初のインデックス(両端を含む)から-
>コピーされる範囲の最後のインデックス(含まれない)。(このインデックスは、配列の範囲外である可能性があります)。

元の記事を12件公開しました 賞賛されました0 訪問89

おすすめ

転載: blog.csdn.net/charlotte_tsui/article/details/105327048