首页 > 其他分享 >剑指offer - 面试题6:重建二叉树

剑指offer - 面试题6:重建二叉树

时间:2022-10-28 12:03:33浏览次数:62  
标签:node pre 面试题 end offer int start 二叉树 post


package Chapter2;

/**
* 面试题6:重建二叉树
* 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
* 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
* 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},
* 或者输入后序遍历序列{7,4,2,5,8,6,3,1}和中序遍历序列{4,7,2,1,5,3,8,6}则重建二叉树。
*/

public class _06_binaryTree {
public static void main(String[] args) {
int []pre = {1,2,4,7,3,5,6,8};
int []in = {4,7,2,1,5,3,8,6};
int []post = {7, 4, 2, 5, 8, 6, 3, 1}; // 后序遍历
_06_function f = new _06_function();
_06_function.TreeNode res1 = f.createTree(pre, 0, pre.length - 1, in, 0, in.length - 1);
_06_function.TreeNode res2 = f.createTreeByINNPost(in, 0, in.length - 1, post, 0, post.length - 1);
System.out.println("==============前,中===============");
f.preOrder(res1);
System.out.println();
f.inOrder(res1);
System.out.println();
f.postOrder(res1);
System.out.println();
System.out.println("==============中,后===============");
f.preOrder(res2);
System.out.println();
f.inOrder(res2);
System.out.println();
f.postOrder(res2);
}
}

class _06_function {
static class TreeNode {
int data;
TreeNode left;
TreeNode right;
public TreeNode(int data) {
this.data = data;
}
}
TreeNode createTree(int []pre, int pre_start, int pre_end, int []in, int in_start, int in_end) {
if(pre_start > pre_end || in_start > in_end) return null;

TreeNode tree_node = new TreeNode(pre[pre_start]);

for (int i = in_start; i <= in_end; i++) {
if(pre[pre_start] == in[i]) {
tree_node.left = createTree(pre, pre_start + 1, pre_start + (i - in_start),
in, in_start, i - 1);
tree_node.right = createTree(pre, pre_start + (i - in_start) + 1, pre_end,
in, i + 1, in_end);
}
}

return tree_node;
}
TreeNode createTreeByINNPost(int []in, int in_start, int in_end, int []post, int post_start, int post_end) {
if(in_start > in_end || post_start > post_end) return null;

TreeNode tree_node = new TreeNode(post[post_end]);

for (int i = in_end; i >= 0; i--) {
if(post[post_end] == in[i]) {
tree_node.left = createTreeByINNPost(in, in_start, i - 1,
post, post_start, post_end - (in_end - i) - 1);
tree_node.right = createTreeByINNPost(in, i + 1, in_end,
post, post_end - (in_end - i), post_end - 1);
}
}

return tree_node;
}
void preOrder(TreeNode node) {
if (node != null) {
System.out.print(node.data + " - ");
preOrder(node.left);
preOrder(node.right);
}
}
void inOrder(TreeNode node) {
if (node != null) {
inOrder(node.left);
System.out.print(node.data + " - ");
inOrder(node.right);
}
}
void postOrder(TreeNode node) {
if(node != null) {
postOrder(node.left);
postOrder(node.right);
System.out.print(node.data + " - ");
}
}
}


标签:node,pre,面试题,end,offer,int,start,二叉树,post
From: https://blog.51cto.com/u_11290086/5804055

相关文章

  • 剑指offer - 面试题10:二进制中1的个数
    packageChapter2;/***面试题10:二进制中1的个数*输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。**内存中的那个数(补码)1的个数*/publicclass_10_b......
  • 剑指offer - 面试题9:斐波那契数列
    packageChapter2;/***面试题9:菲波那切数列*输入一个整数n,请你输出斐波那契数列的第n项。*1、1、2、3、5、8、13、21、34、*//**变形题:*一只青蛙一次可以跳上1级......
  • 腾讯前端经典react面试题汇总
    概述一下React中的事件处理逻辑。为了解决跨浏览器兼容性问题,React会将浏览器原生事件(BrowserNativeEvent)封装为合成事件(SyntheticEvent)并传入设置的事件处理程序......
  • 面试题网络相关知识
    原博客地址01、HTTP常见的状态码参考答案:1xx服务器收到请求2xx请求成功3xx重定向4xx客户端错误5xx服务器错误200请求成功301永久重定向,浏览器下次自动......
  • 面试题 JS 不能不会的内容
    原博客地址01、描述事件冒泡的流程,可画图考察点:事件基础知识参考答案://基于DOM树结构,事件会顺着触发元素向上冒泡//阻止冒泡event.stopPropagation();点击一个......
  • 前端面试题(基础)
    平时用的代码托管平台 以及基本指令? 初始化仓库gitinit查看当前状态status克隆仓库ssh地址 Gitclone“仓库连接”拉取仓库数据gitpull将代码上传到缓存git......
  • 静态二叉树建立
    #defineSZ(x)(int)(x.size())constintinf=0x3f3f3f3f;strings="ab##C##";structNode{intval;intl,r;Node(){val=inf;}......
  • new: 轮播图 | MDN上HTML的总结和CSS面试题解答,以及vue-admin/豆瓣一个静态页面的实现
    主要参看oppo官网https://www.oppo.com/cn/,实现以下功能一、轮播图https://www.cnblogs.com/WindrunnerMax/p/12638005.html通常是在首页读秒播放的图片,本次了解的是opp......
  • 力扣(leetcode) 104.二叉树的最大深度 (详细步骤分解递归)
    题目在这:​​https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/​​思路分析:找二叉树的最大深度,用递归比较好理解也比较好想。遍历左子树,遍历右子树。回退......
  • 力扣(leetcode) 101. 对称二叉树 (对称的性质)(传统递归法)
    题目在这:​​https://leetcode-cn.com/problems/symmetric-tree/​​法一:思路分析:题目没什么难的。对称二叉树,也可以理解为镜像二叉树。第一种方法比较容易理解,对称二叉......