首页 > 编程知识 正文

根据遍历序列确定二叉树,树的先序中序后序遍历

时间:2023-05-05 21:27:04 阅读:157331 作者:2474

题目描述

通过对一棵树的中序扫描和后序扫描来构造二叉树。

注意:

可以假设树没有重复的要素。

用例描述:

in order=[ 9,3,15,20,7 ]

postorder=[ 9,15,7,20,3 ]

返回下一个二叉树。

3

/

9 20

/

15 7

思路

主题给出中序遍历和后序遍历的结果作为数组,由于操作不方便,可以利用集合类辅助二叉树的构建。 这里,常用的list如果中序遍历的list长为0,则表示空树直接返回nul,如果中序遍历的list长为1,则表示当前的节点为叶节点,根据后序遍历的list直接返回

根据后续导线测量的结果,可以将leftIn [0,leftSize rightIn [ leftSize 1,inOrderList.size () ]分类为:

leftPost [0,leftSize rightPost [ leftSize,postorderlist.size(-1 );代码如下:

import java.util.ArrayList; import java.util.List; class TreeNode{ public int val; 公共树左; public TreeNode right; publictreenode(intval ) { this.val=val; } class solution { privatelistintegerarraytolist (int [ ] arr ) } { list integer list=new ArrayList }; for(intx:ARR ) list.add ) x; } return list; } publictreenodebuildtree (int [ ] in order,int[] postorder )/1 .数组由listlistintegerinorderlist=arraytolist ) in order //2 .辅助方法的构建returnbuildhelper(inorderlist,postOrderList ); } privatetreenodebuildhelper (listintegerinorderlist, listintegerpostorderlist (//inOrderList.size )=0时,表示是空树(in order list.size )==1时,表示当前树中只有一个节点如果直接返回到该节点,则为if(inorderlist.size )==1)返回新节点(in order list.gize )//表示postorder Lise.get (postorder list.size (-1 )根节点的值introotval=postorderlist.get ) postorderlist.size的trooted 通过rootVal的中顺序扫描来确定左部分树的位置intleftsize=in order list.index of (root val ); listintegerleftin=in order list.sublist (0,leftSize ); listintegerrightin=in order list.sublist (left size 1,inOrderList.size ); listintegerleftpost=postorder list.sublist (0,leftSize ); listintegerrightpost=postorder list.sublist (leftsize,postorderlist.size(-1 ) ); //递归创建左子树root.left=buildhelper(leftin,leftPost ); //递归创建右部分树root.right=buildHelper(rightin,rightPost ); 返回根; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。