美文网首页
二叉树树转换为求和树

二叉树树转换为求和树

作者: 正经龙 | 来源:发表于2019-08-19 00:03 被阅读0次

题目描述

image.png
image.png

题目分析

  1. 利用前序遍历和中序遍历创建树
  2. 通过递归获取子节点的和,最后求得根节点的和
  3. 最后利用递归得到中序遍历的结果
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Tree{
    TreeNode root;
    public Tree(){
        root = null;
    }
    public TreeNode create(int b1,int b2, int m1,int m2,int[]before,int[]mid){
        if(b2 < b1 || m2 < m1)
            return null;
        TreeNode node = new TreeNode(before[b1]);
        int index = 0;
        for(int i = m1;i <= m2;i++){
            if(mid[i] == before[b1]){
                index = i;//找到下标
            }
        }
        node.left = create(b1+1,b1+(index-m1),m1,index-1,before,mid);
        node.rigth = create(b1+(index-m1+1),b2,index+1,m2,before,mid);

        return node;
    }
    public void createTree(int[] before,int[] mid){
    //创建树
        root = create(0,before.length-1,0,mid.length-1,before,mid);
    }


    public int getChild(TreeNode node){
        if(node == null)
            return 0;
        if(node.left == null && node.rigth == null){
            int temp = node.data;
            node.data = 0;
            return temp;
        }
        else {
            int temp = node.data;
            node.data = getChild(node.left)+getChild(node.rigth);
            return node.data + temp;
        }
    }
    
    public void trans(){
        TreeNode node = root;
        node.data = getChild(node.left)+getChild(node.rigth);

    }

    public void printMid(TreeNode node,List<Integer> list){
        if(node == null)
            return;
        printMid(node.left,list);
        list.add(node.data);
        printMid(node.rigth,list);
    }
    public List<Integer> print(int type){
        List<Integer> list = new ArrayList<>();
        switch (type){
            case 1:
                printMid(root,list);
        }
        return list;
    }
}
class TreeNode{
    TreeNode left;
    TreeNode rigth;
    int data;
    public TreeNode(int i){
        this.data = i;
    }
}
public class Main{
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[]A = br.readLine().split(" ");
        String[]B = br.readLine().split(" ");
        int len = A.length;
        int before[] = new int[len];
        int mid[] = new int[len];
        for(int i = 0; i < len;i++){
            before[i] = Integer.valueOf(A[i]);
        }
        for(int i = 0; i < len;i++){
            mid[i] = Integer.valueOf(B[i]);
        }

        Tree tree = new Tree();
        tree.createTree(before,mid);
        tree.trans();
        List<Integer> list = tree.print(1);
        for(Integer i : list){
            System.out.print(i);
            System.out.print(" ");
        }
    }
}

相关文章

  • Java_二叉树概念及基本操作

    树、森林和二叉树的转换 树转换为二叉树 森林转换为树 二叉树转换为树 二叉树转换为森林 代码

  • 数据结构四之赫夫曼树

    一丶树、森林、二叉树的转换 1-1丶树转换为二叉树 1-2丶森林转换为二叉树 1-3丶二叉树转换为树 1-3丶二叉...

  • 二叉树树转换为求和树

    题目描述 题目分析 利用前序遍历和中序遍历创建树 通过递归获取子节点的和,最后求得根节点的和 最后利用递归得到中序...

  • 数据结构学习笔记

    1. 树,森林,二叉树之间的转换 树转换为二叉树 森林转为二叉树 二叉树转为树 二叉树转为森林 2. 哈弗曼树

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • Day18 剑指offer:二叉树镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 剑指offer-二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树----------8-----...

  • 二叉树的镜像

    题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树   ...

网友评论

      本文标题:二叉树树转换为求和树

      本文链接:https://www.haomeiwen.com/subject/oxkjsctx.html