当前位置:网站首页>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;
}
}
边栏推荐
- 【数字IC验证快速入门】15、SystemVerilog学习之基本语法2(操作符、类型转换、循环、Task/Function...内含实践练习)
- Linux server development, MySQL stored procedures, functions and triggers
- [quick start of Digital IC Verification] 17. Basic grammar of SystemVerilog learning 4 (randomization)
- Introduction to basic components of wechat applet
- 2022 National latest fire-fighting facility operator (primary fire-fighting facility operator) simulation questions and answers
- [guess-ctf2019] fake compressed packets
- game攻防世界逆向
- Sign up now | oar hacker marathon phase III, waiting for your challenge
- pytest+allure+jenkins环境--填坑完毕
- Thinkcmf6.0 installation tutorial
猜你喜欢
随机推荐
php导出百万数据
CTF daily question day43 rsa5
[quickstart to Digital IC Validation] 15. Basic syntax for SystemVerilog Learning 2 (operator, type conversion, loop, Task / Function... Including practical exercises)
Paddlepaddle 29 dynamically modify the network structure without model definition code (relu changes to prelu, conv2d changes to conv3d, 2D semantic segmentation model changes to 3D semantic segmentat
pytest+allure+jenkins环境--填坑完毕
C语言二叉树与建堆
Padavan manually installs PHP
Info | webrtc M97 update
Cnopendata geographical distribution data of religious places in China
Zsh shell adds automatic completion and syntax highlighting
2022 welder (elementary) judgment questions and online simulation examination
解决问题:Unable to connect to Redis
Thinkcmf6.0 installation tutorial
Installing postgresql11 database under centos7
Leetcode 40: combined sum II
[guess-ctf2019] fake compressed packets
2022 Inner Mongolia latest advanced fire facility operator simulation examination question bank and answers
Roulette chart 2 - writing of roulette chart code
pytest+allure+jenkins安装问题:pytest: error: unrecognized arguments: --alluredir
LeetCode 90:子集 II