四道题弄懂根据遍历顺序构造二叉树

2024-04-03 17:20

本文主要是介绍四道题弄懂根据遍历顺序构造二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

模板:

构造二叉树:

public TreeNode f(..){TreeNode root=..;root.left=f(..);root.right=f(..);return root;
}

 根据序列构造二叉树:

Map<Integet,Integet>
public main(int[] nums){return f(nums,0,nums.length-1);
}
public TreeNode f(int[] nums,int left,int right){if(left>right)    return null;TreeNode root=new TreeNode(nums[index]);int k=map.get(index);root.left=f(nums,left,k-1);root.right=f(nums,k+1,right);return root;
} 

1.合并二叉树(LeetCode617)

class Solution {public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {if (t1 == null) {return t2;}if (t2 == null) {return t1;}TreeNode merged = new TreeNode(t1.val + t2.val);merged.left = mergeTrees(t1.left, t2.left);merged.right = mergeTrees(t1.right, t2.right);return merged;}
}

2.最大二叉树(LeetCode654)

模板题

class Solution {Map<Integer,Integer> map=new HashMap<>();public TreeNode constructMaximumBinaryTree(int[] nums) {for(int i=0;i<nums.length;i++)  map.put(nums[i],i);return f(nums,0,nums.length-1);}public TreeNode f(int[] nums,int left,int right){if(left>right)  return null;int max=-1;for(int i=left;i<=right;i++)    max=Math.max(max,nums[i]);int k=map.get(max);TreeNode root=new TreeNode(max);root.left=f(nums,left,k-1);root.right=f(nums,k+1,right);return root;}
}

3.从前序与中序遍历构造二叉树(LeetCode105)

class Solution {Map<Integer,Integer> map=new HashMap<>();public TreeNode buildTree(int[] preorder, int[] inorder) {for(int i=0;i<inorder.length;i++)   map.put(inorder[i],i);return f(preorder,inorder,0,preorder.length-1,0,inorder.length-1);}public TreeNode f(int[] preorder,int[] inorder,int pLeft,int pRight,int inLeft,int inRight){if(pLeft>pRight)    return null;TreeNode root=new TreeNode(preorder[pLeft]);int k=map.get(root.val);root.left=f(preorder,inorder,pLeft+1,pLeft+1+k-1-inLeft,inLeft,k-1);root.right=f(preorder,inorder,pLeft+1+k-1-inLeft+1,pRight,k+1,inRight);return root;}
}

4.从中序和后序遍历构造二叉树(LeetCode106)

class Solution {Map<Integer,Integer> map=new HashMap<>();public TreeNode buildTree(int[] inorder, int[] postorder) {for(int i=0;i<inorder.length;i++)   map.put(inorder[i],i);return f(postorder,inorder,0,postorder.length-1,0,inorder.length-1);}public TreeNode f(int[] postorder,int[] inorder,int pLeft,int pRight,int inLeft,int inRight){if(pLeft>pRight)    return null;TreeNode root=new TreeNode(postorder[pRight]);int k=map.get(root.val);root.left=f(postorder,inorder,pLeft,pRight-1-inRight+k,inLeft,k-1);root.right=f(postorder,inorder,pRight-1-inRight+k+1,pRight-1,k+1,inRight);return root;}
}

这篇关于四道题弄懂根据遍历顺序构造二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873519

相关文章

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注