亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中實(shí)現(xiàn)二叉樹的遍歷與重構(gòu)

 更新時(shí)間:2023年10月19日 10:11:56   作者:Eocc  
這篇文章主要介紹了Java中實(shí)現(xiàn)二叉樹的遍歷與重構(gòu),樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n>=0)個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系的集合,把它叫做樹是因?yàn)樗雌饋硐褚豢玫箳斓臉?也就是說它是根朝上,而葉朝下的,需要的朋友可以參考下

Java二叉樹的遍歷與重構(gòu)

在這里插入圖片描述

  • 先序遍歷: 1,2,7,4,5,3,6,8
  • 中序遍歷:7,2,5,4,1,6,3,8
  • 后序遍歷:7,5,4,2,6,8,3,1

根據(jù)先序遍歷和中序遍歷重構(gòu)二叉樹

  • 先序遍歷的第一個(gè)節(jié)點(diǎn)為根節(jié)點(diǎn)1
  • 在中序遍歷中找到根節(jié)點(diǎn)1,其左側(cè)的就是這個(gè)節(jié)點(diǎn)的左子樹的中序遍歷7,2,5,4,右側(cè)的就是右子樹的中序遍歷6,3,8
  • 在先序遍歷中找到左右子樹的先序遍歷2,7,4,5,3,6,8
  • 遞歸左右子樹重構(gòu)二叉樹(左子樹的先序遍歷的第一個(gè)節(jié)點(diǎn)即為左子樹的根節(jié)點(diǎn)…)

根據(jù)中序遍歷和后序遍歷重構(gòu)二叉樹

與前面差不多,后序遍歷的最后一個(gè)節(jié)點(diǎn)為根節(jié)點(diǎn),然后去中序遍歷中找根節(jié)點(diǎn)的左右子樹。

Tip: 中序遍歷的根節(jié)點(diǎn)在中間,后序遍歷的根節(jié)點(diǎn)在最后,取子樹的遍歷的時(shí)候能用到

如:第一次遞歸中,根節(jié)點(diǎn)1的在中序遍歷中是第5個(gè)節(jié)點(diǎn),那么其左子樹就是左邊4個(gè)(1 ~ 5-1),右子樹為右3個(gè)(5+1 ~ 8);左子樹的后續(xù)遍歷為前4個(gè)(1 ~ 5-1),右子樹為連著的后面的3個(gè)(5~7)。

注意:根據(jù)先序遍歷和后續(xù)遍歷不能重構(gòu)唯一的二叉樹

package utils;

import java.util.Arrays;

class Node {
	int val;
	Node left;
	Node right;
	public Node() {}
	public Node(int val) {
		this.val = val;
	}
}

public class BinaryTree {
	// 先序遍歷  根-左-右
	private static void firstOrder(Node root) {
		if (root ==null)return;
		System.out.print(root.val);
		firstOrder(root.left);
		firstOrder(root.right);
	}
	
	// 中序遍歷  左-根-右
	private static void inOrder(Node root) {
		if (root ==null)return;
		inOrder(root.left);
		System.out.print(root.val);
		inOrder(root.right);
	}

	// 后序遍歷  左-右-根
	private static void lastOrder(Node root) {
		if (root ==null)return;
		lastOrder(root.left);
		lastOrder(root.right);
		System.out.print(root.val);
	}
	
	// 根據(jù)先序遍歷和后序遍歷重構(gòu)二叉樹
    private static Node reConstructBinaryTree(int[] preOrder, int[] inOrder) {
        if (preOrder.length == 0 || inOrder.length == 0) {
            return null;
        }
        int len = preOrder.length;
        Node node = new Node(preOrder[0]);
        for (int i=0; i<len; i++) {
            if (preOrder[0] == inOrder[i]) {
                node.left = reConstructBinaryTree(
                        Arrays.copyOfRange(preOrder, 1, i+1),
                        Arrays.copyOfRange(inOrder, 0, i)
                );
                node.right = reConstructBinaryTree(
                        Arrays.copyOfRange(preOrder, i+1, len),
                        Arrays.copyOfRange(inOrder, i+1, len)
                );
            }
        }
        return node;
    }
	
	// 根據(jù)中序遍歷和后續(xù)遍歷重構(gòu)二叉樹
    private static Node reConstructBinaryTree2(int[] inOrder, int[] lastOrder) {
        if (lastOrder.length == 0 || inOrder.length == 0) {
            return null;
        }
        int len = lastOrder.length;
        Node node = new Node(lastOrder[len-1]);
        for (int i=0; i<len; i++) {
            if (lastOrder[len-1] == inOrder[i]) {
                node.left = reConstructBinaryTree2(
                        Arrays.copyOfRange(inOrder, 0, i),
                        Arrays.copyOfRange(lastOrder, 0, i)
                );
                node.right = reConstructBinaryTree2(
                        Arrays.copyOfRange(inOrder, i+1, inOrder.length),
                        Arrays.copyOfRange(lastOrder, i, lastOrder.length-1)
                );
            }
        }
        return node;
    }

    public static void main(String[] args) {
        int[] preOrder = {1,2,7,4,5,3,6,8};
        int[] inOrder = {7,2,5,4,1,6,3,8};
        int[] lastOrder = {7,5,4,2,6,8,3,1};
        Node root = reConstructBinaryTree(preOrder, inOrder);
        lastOrder(root);
        System.out.println();
        root = reConstructBinaryTree2(inOrder, lastOrder);
        firstOrder(root);
    }

}

到此這篇關(guān)于Java中實(shí)現(xiàn)二叉樹的遍歷與重構(gòu)的文章就介紹到這了,更多相關(guān)Java二叉樹的遍歷與重構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用Springfox?Swagger實(shí)現(xiàn)API自動(dòng)生成單元測試

    如何使用Springfox?Swagger實(shí)現(xiàn)API自動(dòng)生成單元測試

    Springfox是一個(gè)使用Java語言開發(fā)開源的API Doc的框架,它的前身是swagger-springmvc,可以將我們的Controller中的方法以文檔的形式展現(xiàn),這篇文章主要介紹了如何使用Springfox?Swagger實(shí)現(xiàn)API自動(dòng)生成單元測試,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • java用撲克牌計(jì)算24點(diǎn)

    java用撲克牌計(jì)算24點(diǎn)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)24點(diǎn)撲克牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • springboot cloud使用eureka整合分布式事務(wù)組件Seata 的方法

    springboot cloud使用eureka整合分布式事務(wù)組件Seata 的方法

    這篇文章主要介紹了springboot cloud使用eureka整合分布式事務(wù)組件Seata 的方法 ,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Mybatis-Plus邏輯刪除的用法詳解

    Mybatis-Plus邏輯刪除的用法詳解

    這篇文章主要為大家詳細(xì)介紹了Mybatis-Plus 邏輯刪除的用法,文中有詳細(xì)的代碼示例,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • java進(jìn)行遠(yuǎn)程部署與調(diào)試及原理詳解

    java進(jìn)行遠(yuǎn)程部署與調(diào)試及原理詳解

    這篇文章主要介紹了java進(jìn)行遠(yuǎn)程部署與調(diào)試及原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java深入淺出說流的使用

    Java深入淺出說流的使用

    這篇文章主要介紹了Java深入淺出說流的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 詳解在spring boot中消息推送系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    詳解在spring boot中消息推送系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    這篇文章主要介紹了詳解在spring boot中消息推送系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • spring boot集成shiro詳細(xì)教程(小結(jié))

    spring boot集成shiro詳細(xì)教程(小結(jié))

    這篇文章主要介紹了spring boot 集成shiro詳細(xì)教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • ehcache模糊批量移除緩存的方法

    ehcache模糊批量移除緩存的方法

    本篇文章主要介紹了ehcache模糊批量移除緩存的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • SpringCloud Eureka服務(wù)的基本配置和操作方法

    SpringCloud Eureka服務(wù)的基本配置和操作方法

    Eureka是Netflix開源的一個(gè)基于REST的服務(wù)治理框架,主要用于實(shí)現(xiàn)微服務(wù)架構(gòu)中的服務(wù)注冊與發(fā)現(xiàn),Eureka是Netflix開源的服務(wù)發(fā)現(xiàn)框架,用于在分布式系統(tǒng)中實(shí)現(xiàn)服務(wù)的自動(dòng)注冊與發(fā)現(xiàn),本文介紹SpringCloud Eureka服務(wù)的基本配置和操作方法,感興趣的朋友一起看看吧
    2023-12-12

最新評(píng)論