博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA版本:根据二叉树的前序遍历和中序遍历构造出二叉树
阅读量:4042 次
发布时间:2019-05-24

本文共 2840 字,大约阅读时间需要 9 分钟。

根据二叉树的前序遍历和中序遍历构造出二叉树

给出二叉树的前序遍历数组和中序遍历数组构造出该二叉树

例如:

这里写图片描述

给出整型数组,代表二叉树的前序遍历结果和中序遍历结果,构造出该二叉树。

int[] preorder = {62,15,12,46,35,57,68,65,79};

int[] inorder = {12,15,35,46,57,62,65,68,79};

算法设计

package com.bean.constructbinarytreedemo;import java.util.ArrayList;import java.util.Stack;public class BuildBinaryTreeDemo {    /*     * 二叉树的前序遍历     * */    public static ArrayList
preOrder(TreeNode root){ Stack
stack = new Stack
(); ArrayList
list = new ArrayList
(); if(root == null){ return list; } stack.push(root); while(!stack.empty()){ TreeNode node = stack.pop(); list.add(node.data); if(node.rightChild!=null){ stack.push(node.rightChild); } if(node.leftChild != null){ stack.push(node.leftChild); } } System.out.println(list); return list; } /* * 二叉树的中序遍历 * */ public static ArrayList
inOrder(TreeNode root){ ArrayList
list = new ArrayList
(); Stack
stack = new Stack
(); TreeNode current = root; while(current != null|| !stack.empty()){ while(current != null){ stack.add(current); current = current.leftChild; } current = stack.peek(); stack.pop(); list.add(current.data); current = current.rightChild; } System.out.println(list); return list; } /* * 二叉树的后续遍历 * */ public static ArrayList
postOrder(TreeNode root){ ArrayList
list = new ArrayList
(); if(root == null){ return list; } list.addAll(postOrder(root.leftChild)); list.addAll(postOrder(root.rightChild)); list.add(root.data); System.out.println(list); return list; } //构造二叉树 public TreeNode buildTree(int[] preorder, int[] inorder) { return buildBinaryTreeProcess(0, 0, inorder.length - 1, preorder, inorder); } //构造过程 public TreeNode buildBinaryTreeProcess(int preStart, int inStart, int inEnd, int[] preorder, int[] inorder) { if (preStart > preorder.length - 1 || inStart > inEnd) { return null; } TreeNode root = new TreeNode(preorder[preStart]); int inIndex = 0; // Index of current root in inorder for (int i = inStart; i <= inEnd; i++) { if (inorder[i] == root.data) { inIndex = i; } } root.leftChild = buildBinaryTreeProcess(preStart + 1, inStart, inIndex - 1, preorder, inorder); root.rightChild = buildBinaryTreeProcess(preStart + inIndex - inStart + 1, inIndex + 1, inEnd, preorder, inorder); return root; } //测试代码 public static void main(String[] args) { // TODO Auto-generated method stub int[] preorder = { 62,15,12,46,35,57,68,65,79}; int[] inorder = { 12,15,35,46,57,62,65,68,79}; BuildBinaryTreeDemo buildBT=new BuildBinaryTreeDemo(); TreeNode tree = buildBT.buildTree(preorder, inorder); //遍历访问二叉树:前序、中序和后序 buildBT.preOrder(tree); buildBT.inOrder(tree); buildBT.postOrder(tree); }}

(完)

你可能感兴趣的文章
mysql:sql truncate (清除表数据)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt5 everywhere编译完成后,找不到qmake
查看>>
arm-linux开机读取硬件时钟,设置系统时钟。
查看>>
交叉编译在x86上调试好的qt程序
查看>>
qt 创建异形窗体
查看>>
可重入函数与不可重入函数
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
输入设备节点自动生成
查看>>
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>