当前位置:网站首页>Recursive method to construct binary tree from preorder and inorder traversal sequence
Recursive method to construct binary tree from preorder and inorder traversal sequence
2022-07-07 08:04:00 【Hydrion-Qlz】
105. Construction of binary trees from traversal sequences of preorder and middle order
Medium difficulty
Given two arrays of integers preorder and inorder , among preorder It's a binary tree The first sequence traversal , inorder It's from the same tree In the sequence traversal , Please construct a binary tree and return its root node .
Ideas
The knowledge points that need to be understood are :
- In the middle order traversal, the left side of a node is all nodes of its left subtree , On the right are all the nodes of its right subtree
- The first node in the preorder traversal is the current node , Its left subtree and right subtree are on its right
We can find the current node according to the previous traversal , Then find the position of the current root node in the ordered array , Then the range of the new left subtree and right subtree is determined by the position of the root node and the range of its subtree , Then recurs continuously , Until the last traversal of the entire array .
We cannot determine the range of left subtree and right subtree in the preceding traversal , But you can get this value from the middle order traversal
Specific please see 32 And 33 That's ok
package cn.edu.xjtu.carlWay.tree.preAndInConstructBinaryTree;
import cn.edu.xjtu.Util.TreeNode.TreeNode;
/** * 105. Construction of binary trees from traversal sequences of preorder and middle order * Given two arrays of integers preorder and inorder , among preorder Is the prior traversal of a binary tree , inorder Is the middle order traversal of the same tree , Please construct a binary tree and return its root node . * <p> * https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ */
public class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return helpBuild(preorder, 0, preorder.length, inorder, 0, inorder.length);
}
private TreeNode helpBuild(int[] preorder, int preLeft, int preRight, int[] inorder, int inLeft, int inRight) {
if (inRight - inLeft == 0) {
return null;
}
if (inRight - inLeft == 1) {
return new TreeNode(inorder[inLeft]);
}
TreeNode root = new TreeNode(preorder[preLeft]);
int rootIndex = 0;
for (int i = inLeft; i < inRight; i++) {
if (inorder[i] == root.val) {
rootIndex = i;
break;
}
}
root.left = helpBuild(preorder, preLeft + 1, preLeft + 1 + (rootIndex - inLeft), inorder, inLeft, rootIndex);
root.right = helpBuild(preorder, preLeft + 1 + (rootIndex - inLeft), preRight, inorder, rootIndex + 1, inRight);
return root;
}
}
边栏推荐
- Lattice coloring - matrix fast power optimized shape pressure DP
- [experience sharing] how to expand the cloud service icon for Visio
- Common validation comments
- 【数字IC验证快速入门】14、SystemVerilog学习之基本语法1(数组、队列、结构体、枚举、字符串...内含实践练习)
- Linux server development, MySQL index principle and optimization
- Cnopendata American Golden Globe Award winning data
- Wechat applet data binding multiple data
- Leetcode 90: subset II
- Sign up now | oar hacker marathon phase III, waiting for your challenge
- Yugu p1020 missile interception (binary search)
猜你喜欢

JS quick start (I)

buuctf misc USB

Codeforces Global Round 19

Linux server development, MySQL transaction principle analysis

QT learning 28 toolbar in the main window

Shell 脚本的替换功能实现

【数字IC验证快速入门】14、SystemVerilog学习之基本语法1(数组、队列、结构体、枚举、字符串...内含实践练习)

Linux server development, redis protocol and asynchronous mode

开源生态|打造活力开源社区,共建开源新生态!

Linux server development, redis source code storage principle and data model
随机推荐
C语言航班订票系统
Codeforces Global Round 19
QT learning 26 integrated example of layout management
Niu Mei's mathematical problem --- combinatorial number
[quick start of Digital IC Verification] 17. Basic grammar of SystemVerilog learning 4 (randomization)
[2022 ciscn] replay of preliminary web topics
Most elements
pytest+allure+jenkins环境--填坑完毕
Hands on deep learning (IV) -- convolutional neural network CNN
Shell 脚本的替换功能实现
Pytest + allure + Jenkins Environment - - achèvement du remplissage de la fosse
大视频文件的缓冲播放原理以及实现
Linux server development, SQL statements, indexes, views, stored procedures, triggers
Open source ecosystem | create a vibrant open source community and jointly build a new open source ecosystem!
[VHDL parallel statement execution]
Codeforce c.strange test and acwing
Numbers that appear only once
Pytorch parameter initialization
B. Value sequence thinking
QT learning 28 toolbar in the main window