暑假博客二:由前序中序遍历生成二叉树
首先我们要知道前序遍历,中序遍历生成二叉树的顺序:
前序遍历:先遍历根节点
再遍历左子树
最后遍历右子树
中序遍历:先遍历左子树
再遍历根节点
最后遍历右子树
我们理一理不用编程的思路来看这个问题:
因为二叉树的根节点是在前序遍历的第一位,我们可以先取前序遍历第一位在中序遍历中定位根节点,可以得到左子树的节点数和右子树的节点数
然后重复这种运算就构造二叉树,也就是递归。
我们看下面的二叉树
前序遍历为:3,9,20,15,7
中序遍历为:9,3,15,20,7
public TreeNode buildTree(int[] preorder, int[] inorder) {return buildTreeHelper(preorder, 0, preorder.length, inorder, 0, inorder.length);
}private TreeNode buildTreeHelper(int[] preorder, int p_start, int p_end, int[] inorder, int i_start, int i_end) {// preorder 为空,直接返回 nullif (p_start == p_end) {return null;}int root_val = preorder[p_start];TreeNode root = new TreeNode(root_val);//在中序遍历中找到根节点的位置int i_root_index = 0;for (int i = i_start; i < i_end; i++) {if (root_val == inorder[i]) {i_root_index = i;break;}}int leftNum = i_root_index - i_start;//递归的构造左子树root.left = buildTreeHelper(preorder, p_start + 1, p_start + leftNum + 1, inorder, i_start, i_root_index);//递归的构造右子树root.right = buildTreeHelper(preorder, p_start + leftNum + 1, p_end, inorder, i_root_index + 1, i_end);return root;
}
别问,问就是力扣刚学的,掌握还是不太熟练,单纯防止自己划水,欢迎斧正。
暑假博客二:由前序中序遍历生成二叉树相关推荐
- 二叉树题目 ----7 前序中序遍历构造二叉树
前序中序遍历构造二叉树 思路 在前序中找根结点 根据根结点 + 中序,分成左右两棵子树 根据子树长度,把前序分成左右两颗子树 递归处理子树 /*** Definition for a binary t ...
- 二叉树 | 根据前序中序遍历重建二叉树
Thinking 如果给你一颗二叉树的前序序列和中序序列,让你输出它的后序序列,你会怎么做呢? 也许很多同学能够很快的在纸上将一颗简单的二叉树画出来,但如果真正让你将自己的思路转换为算法,你会去怎样实 ...
- 中序遍历java6_Java 通过先序和中序遍历生成二叉树
题目 二叉树的前序以及后续序列,以空格间隔每个元素,重构二叉树,最后输出二叉树的三种遍历方式的序列以验证. 输入: 1 2 3 4 5 6 7 8 9 10 3 2 5 4 1 7 8 6 10 9 ...
- 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历
二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root ...
- 通过前序遍历和中序遍历构建二叉树 python实现
前言 通过前序遍历和中序遍历构建二叉树的原理,主要是找前序遍历根节点在中序遍历中的位置,然后将二叉树而成左子树和右子树,然后依次进行这样的操作,思路还是比较简单的 代码 class Node:def ...
- 数据结构---前序和中序遍历的二叉树序列还原二叉树
数据结构-前序和中序遍历的二叉树序列还原二叉树 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...
LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...
- [Leetcode][第99题][JAVA][恢复二叉搜索树][中序遍历]
[问题描述][困难] [解答思路] 1. 显示中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public void recoverTree(TreeNode r ...
- leetcode105 前序中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15 ...
最新文章
- 4g内存只有1.6g可用_32位系统可用内存小 遇到32位系统内存小的解决方法
- C语言函数集(十七)
- 设计模式总结 (5)行为型模式续
- java从小到大排序函数_利用随机函数产生10个1~100之间的整数,按从小到大的顺序排列输出...
- 陕西理工大学计算机科学与技术系,陕西理工大学计算机科学与技术专业2016年在陕西理科高考录取最低分数线...
- 我的面试题-软件测试基础
- 简述使jdbc连接mysql数据库,关于JDBC的六个步骤
- pgadminIII 的基本操作
- C# MessageQueue例子
- 深入浅出MySQL规范
- 【PART 1】OAK-D+TurtleBot3机器人项目全解析:SLAM、ROS、深度图、点云。
- git/github教程
- 深度剖析头条面试真题 | 二叉树那点事儿
- Wincc 编辑颜色对应c脚本返回的十进制数
- tensorflow语义分割计算mIoU时忽略某一类别
- kali安装burpsuite专业版
- 《项目管理中国式漫画》读后感
- 查oracle的tps,Oracle TPS指标
- Laravel配置系统默认Log路径--Star.hou
- 【ROS】官方tf教程turtle_tf2源码原理解读
热门文章
- 浪潮服务器安装双系统,求(win和linux)的双系统安装过程
- c++多线程之_beginthreadex
- 知昨日之非,悟今日之是!焉知昨日之非为非,今日之是为是?
- 易语言修改服务器数据库连接,sql开发管理软件 易语言 易语言连接sql数据库
- 初学h5 一些小常识
- BitBlt函数解析
- 网页浏览器的搜索引擎及算法(包括网页,App内,后台数据等)
- 室内场景示意图绘制(Floorplanner的简单操作)
- AutoForm v4.11-ISO 1CD(专业板金优化分析软件,好用!)
- 打靶归来 - 详解upload-labs靶场(下)