//二叉树的最小深度 /* * 给定一个二叉树,找出其最小深度 * 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 * */ public class P18 { static class TreeNode{ int val; TreeNode left; TreeNode right; //记录当前深度
二叉树的序列化和反序列化 题目链接:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/ 题目大意:写两个函数,能够分别对二叉树进行序列化和反序列化 方法1:bfs 序列化:采用队列实现,根节点先入队,处理时按照左孩子右孩子的顺序处理 func (this *Codec) serializ
深搜和广搜 1.概念 深度优先搜索(Depth First Search, DFS):“不撞南墙不回头” 广度优先搜索(Breath First Search, BFS):“一石激起千层浪” 2.DFS 2.1 特点 深度优先搜索的主要思路是从一个未访问过的节点开始,沿着一条路一直走,直到走到头后没法再走了,这时候回退到上一个节点,然后再
给出一些二叉树的入门级(确信)使用方法: 1 //用递归的方式建立一个完全二叉树 2 void Bulid(int t){ 3 UpdateData(t); //添加数据 4 Build(t + t); //如果子节点存在 5 Build(t + t + 1); 6 //用这种方法建立非完全二叉树 会存在空间浪费的问题 7 } 8
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-upside-down 题目描述 给你一个二叉树的根节点 root ,请你将此二叉树上下翻转,并返回新的根节点。 你可以按下面的步骤翻转一棵二叉树: 原来的左子节点变成新的根节点原来的根节点变成新的右子节点原来的右子节点
✅做题思路or感想: 这里的插入值的操作不是在节点和节点直接插一个新节点,而是在老的二叉树的末尾新增节点。。。 故这里直接利用二叉搜索树的特性直接找新节点位置就好了 值得注意的是这里是需要让前一个节点链接新节点,也就是存在父子节点之间的赋值操作,所以这里要记录上一个节点!!! c
*题目描述: 解题思路: 深度优先搜索:同时遍历这两颗树,比对节点值是否一致,然后比对其左右节点是否相同 广度优先搜索:也是同时遍历,使用两个队列存储入队的节点,及时返回错误情况,最后跳出循环时,一定要注意,可能两棵树本身节点数量并不相同。 代码: 深度优先搜索 //深度优先搜索: /**
101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3] 输出:false 提示: 树中节点数目在范围 [1, 1000] 内 -100 <= Node.val <= 100 1 /** 2 * Defin
二叉树的遍历 前序遍历 遍历顺序:中,左,右 代码实现: void dfs(TreeNode* root) { if (root != nullptr)result.push_back(root->val); if (root->left != nullptr)dfs(root->left); if (root->right != nullptr)dfs(root->right); } 关于力扣144:
145. 二叉树的后序遍历 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root = [1,null,2,3] 输出:[3,2,1] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 提示: 树中节点的数目在范围 [0, 100] 内 -100 <= Node.val <= 100
【算法框架】二叉搜索树BST 提取自labuladong得算法小抄 查找数是否存在 void BST(TreeNode root,int target){ if (root.val == target){ ... ... //找到目标之后,所需要做的事 } //递归 if (root.val < target) BST(root.right,target); if (root.val > ta
一、JZ7重建二叉树 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构) 假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构 1.递归解法。 比较显然的思路, 1.判断根节点值 2.判断左子树是否为空,若proot2为空
1.二叉树 机试中很少直接考察二叉树的结构定义,而是考察二叉树的前中后三种遍历方法比较多 (1)二叉树的结构定义 (2)以下四种组合能够唯一确定一棵树 (3)模板(根据先序和中序建立一颗二叉树) 刚开始写没有注意到substr是在string.h库里面的 #include<iostream> #include<algorithm> #in
难度:简单 题目描述: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root = [2,1,3] 输出:[2,3,1] 示例 3: 输入:root = [] 输出:[] 解题思路:递归 Java程序: /** * Definition for a binary tr
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 示例 2: /** * Definition for a binary tree node. * public class TreeNode { * public var val: Int * public var left: TreeNode? * public var right: TreeNode?
题目描述 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,
左程云基础班——前缀树 https://www.bilibili.com/video/BV13g41157hK?p=10&share_source=copy_web 1. 前缀树结点 边代表字母,结点存边的信息 private static class TreeNode { public int pass;//经过此结点的边的数量 public int end;//以此边为结束
剑指 Offer 68 - II. 二叉树的最近公共祖先 题目 链接 https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/ 问题描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近
package leetcode; import java.util.ArrayList; import java.util.List; public class offer_68_2 { //判断是否找出p和q boolean flag1=false; boolean flag2=false; public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
例如:给定数组[1,2,2,3,4,4,3] 返回为: 代码如下: public static TreeNode buildTree(Integer[] arr){ if(arr.length==1) return new TreeNode(arr[0]); Queue<TreeNode> queue=new LinkedList<>(); TreeNode root=new TreeNode(arr[0]);
HashMap的put方法的具体流程 对外暴露的put方法 /** * 对外暴露的put方法 **/ public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } putVal方法 final V putVal(int hash, K key, V value, boolean onlyIfAbsent,boolean evict) {
102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: 输入:root = [1] 输出:[[1]] 示例 3: 输入:root = [] 输出:[] 提示: 树中节点数目
package main import "fmt" type treeNode struct { value int //*treeNode left,right 是两个指针类型,但是定义指针,为什么要用treeNode 我有点难理解, // 好像就是用户* +这个结构体的名字就可以表示指针 left, right *treeNode } // 在方法之前 加括号,跟其他的语言
题目描述 你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。 空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。 示例 1: 输入: 二叉树: [1,2,3,4] 1 / \
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 /*解题思路:回溯 1.递归参数:根节点 2.终止条件:节点无左右孩子*/ class Solution { List<String> res = new ArrayList<>(); LinkedList<String> p