leetcode 每日一题 965. 单值二叉树 class Solution { public boolean isUnivalTree(TreeNode root) { if (root == null) { return true; } if(root.left != null && root.left.val != root.val){ return false;
1.二叉树的类定义 2.二叉树的基本性质 3.遍历二叉树 3.1前序遍历 3.2中序遍历 3.3后序遍历 3.4层次遍历 4.二叉树的应用 4.1二叉搜索树 4.2平衡二叉树 4.3红黑树 4.4线段树
给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1: 输入:root = [1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,
口诀: 前序遍历:根结点 ---> 左子树 ---> 右子树 中序遍历:左子树---> 根结点 ---> 右子树 后序遍历:左子树 ---> 右子树 ---> 根结点 层次遍历:仅仅需按层次遍历就可以 二叉树的遍历,是从左到右的,前、中、后这三个字代表着根结点的位置(其实也是最终根结点的位置)。 再次看到前
树:是一种层次关系,如人类社会家谱,社会组织结构,图书管理系统 树存在的原因:层次管理在管理上具有更高的效率查找 静态查找(例如放在数组中: 顺序查找(最简单,效率不高:将元素放在数组中,用一个结构指向数组,结构含两个分量,一个分量是指针指向数组的头,另一个分量代表数组中
二叉树搜索性能比较 我想测试一下不同类型的二叉树搜索数据的性能是什么样的。 众所周知,二叉树有以下几种类型: BST AVL 红黑树 对于搜索数据,具体来讲,当树保持平衡时,其搜索时间复杂度是O(log2n),当树退化成链表时,其搜索时间复杂度变成O(n),其他情况下树的平均搜索时间复杂度就介于这
最开始忽略了左子树为空还得计算右子树的叶子节点深度,直接分为左空右空和其他,对于其他认为直接返回0,导致会直接归入其他而报错! 改正后效果也挺一般: package leetcode01; //给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 publ
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]示例 2: 输入: preorder = [-1], i
二叉树数据结构 public class TreeNode { int val; TreeNode left; TreeNode right; } 理解递归序 如何用递归遍历一颗二叉树 public void recursion(TreeNode root) { if (root != null) { recursion(root.left); recursion(r
线索二叉树(引线二元树) 的定义如下: “一个二叉树通过如下的方法“穿起来”:所有原本为空的右(孩子)指针改为指向该节点在中序序列中的后继,所有原本为空的左(孩子)指针改为指向该节点的中序序列的前驱。 传统的二叉树一般都是以链式存储的结构来表示。这样,二叉树中的每个节
5.20 前言吐槽: 今天是5.20啦,但是作为单身修狗的我只能和代码过啦。。。继续加油算法打卡!!! 堆排序: 堆就是一棵完全二叉树 二叉堆是一种支持插入,删除,查询最值的数据结构。他其实是一棵满足"堆性质"的完全二叉树,树上的每个节点带有一个权值。若树中的任意一个节点的权值都小于
606. 根据二叉树创建字符串 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。 空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。 示例 1: 输入:ro
给定一个二叉树,判断它是否是高度平衡的二叉树 平衡二叉树满足子树都为平衡二叉树且左右子树高度差的绝对值小于1 1. 平衡性和高度判断分离 从上往下对每一个节点判断其左右子树的高度是否满足要求 以及其左右子树是否是平衡二叉树 时间复杂度为O(n2) 可以发现对每个节点进行最大高
236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 示例 1: 给定一
543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 :给定二叉树 1 / \ 2 3 / \ 4 5
222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点
自己先写了一下,还是不会做树! 下面是自己的代码,仍然有问题,甚至考虑这种思路会不会做不出来! package leetcode01; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, Tr
总结: 满二叉树完全二叉树二叉排序树 平衡二叉树,也是二叉排序树 满二叉树 完全二叉树 考点 完全二叉树的高度计算: (1)情况一、这个完全二叉树是满二叉树。 (2)情况二、这个完全二叉树不是满二叉树。 最多有一个度为1的结点(N1=0|1),只有最后两层出现叶子
给你一个二叉树的根节点 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 进阶:你可以运用递归和迭代两种方法解决这个问题吗?
#include <iostream> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <unordered_map> using namespace std; struct TreeNode { int val = 0; TreeNode* left = nullptr; TreeNode*
Java 常见数据结构 概述 数据结构是计算机底层存储,组织数据的方式,是指数据相互之间是以说明方式排在一起的 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率 常见的数据结构有 栈 先进后出,后进后出 存取元素只能在栈尾进行,栈头不能动 队列 先进先出,后
树的存储结构 双亲表示法 通过保存树中每个结点的双亲结点的位置,来表示树中结点之间的结构关系。 #define MAX_TREE_SIZE 100 typedef struct PTNode { ElemType data; int parent; // 双亲位置(双亲的下标) } PTNode; typedef struct { PTNode nodes[MAX_TREE_SIZE
104. 二叉树的最大深度 递归法 可以使用前序遍历(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。 而根节点的高度就是二叉树的最大深度 class Solution: def maxDepth(self, root: Optional[TreeNode]) -> int: return self.getHeight(root)
树 1.一种非线性结构,属于图均属于非线性结构。 树是由结点或顶点和边组成的,不存在任何环的结构,没有结点的树称为空,null,一棵非空的树包括一个根节点,还有很多附加结点,所有结点构成一个多级分层结构。 树的定义:n个节点组成的有限集合。n=0,空树;n>0,1个根节点,m个互不相交的有限集,
注意:如果当前节点会对下面的子节点有整体影响,可以通过辅助函数增长参数列表,借助参数传递信息。 子树题目 101. 对称二叉树 注意:只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。 正是因为要遍历两棵树而且要比较内侧和外侧节点,所以