求和樹

今日開始 每日至少一題

原題鏈接

題目描述
給滿出二叉樹,編寫算法將其轉化爲求和樹

什麼是求和樹:二叉樹的求和樹, 是一顆同樣結構的二叉樹,其樹中的每個節點將包含原始樹中的左子樹和右子樹的和。

二叉樹:
10
/
-2 6
/ \ / \
8 -4 7 5

求和樹:
20(4-2+12+6)
/
4(8-4) 12(7+5)
/ \ / \
0 0 0 0

二叉樹給出前序和中序輸入,求和樹要求中序輸出;
所有處理數據不會大於int;

輸入描述:

2行整數,第1行表示二叉樹的前序遍歷,第2行表示二叉樹的中序遍歷,以空格分割

輸出描述:

1行整數,表示求和樹的中序遍歷,以空格分割

示例1
輸入
複製

10 -2 8 -4 6 7 5
8 -2 -4 10 7 6 5

輸出
複製

0 4 0 20 0 12 0

import java.util.*;
 

public class Main {
    public static void main(String[] args) {

        Scanner sc  = new Scanner(System.in);
        sc.nextLine();
        String[] strNodes = sc.nextLine().split(" ");
        //中序遍歷的節點
         
        int[] nodes = Arrays.stream(strNodes)
                .mapToInt(Integer::parseInt)
                .toArray();
         
        //二分法
        handle(nodes,0,nodes.length-1);



        for(int i:nodes) {
            System.out.print(i+" ");
        }




    }



    //處理一顆小樹 ---> 處理整個樹
    static int handle(int[]nodes, int l,int r) {

        if(l==r) {
            int temp = nodes[l];
            nodes[l] = 0;
            return temp;
        }
        int mid = (l+r)/2;
        int left = handle(nodes,l,mid-1);
        int right = handle(nodes,mid+1,r);
        int midVal = nodes[mid];
        nodes[mid] = left+right;
        return midVal+nodes[mid];
    }


 












}

思路總結:

  1. 滿二叉樹,直接中序遍歷即可確定整棵樹
  2. 遞歸法,類似於給一棵二叉樹求和,不過改了一下形式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章