leetcode_二叉树
Tim_Coder
这个作者很懒,什么都没留下…
展开
-
二叉搜索树是二叉树的一种
二叉搜索树 / 二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树,一棵二叉搜索树(BST)是一棵二叉树,其中,每个节点的值都要大于其左子树中任意节点的值而小于右子树中任意节点的值。因此,二叉搜索树中序遍历得到的值序列是递增有序的...原创 2021-04-13 10:08:00 · 92 阅读 · 0 评论 -
96.不同的二叉树+卡特兰数+只算二叉搜索树可能的结构数
题目:思路:①首先明确卡特兰数可用来计算:给定N个节点,能构成多少种不同的二叉搜索树②动态规划,每个节点可组成的二叉搜索树=左子树可能结构*右子树可能结构代码:class Solution { public int numTrees(int n) { int[] dp = new int[n+1]; dp[0] = 1;//0时为空树 dp[1] = 1;//1时只有一种可能 for(int i = 2; i <= n原创 2020-12-27 16:33:22 · 124 阅读 · 0 评论 -
95.不同的二叉搜索树II+卡特兰数+输出可能的结构
题目:思路:①首先明确概念,二叉搜索树是二叉树的一种:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;②因此想到枚举所有可行的根节点,并递归生成其左右二叉树代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right;原创 2020-12-27 11:12:18 · 99 阅读 · 1 评论 -
297.二叉树的序列化和反序列化
题目:思路:①序列化:前序遍历的方法递归走完整棵树,输出字符串即可②反序列化:对字符串进行spilt()处理,前序遍历的话首位元素为根节点,这个节点用完就从字符串数组里删除,然后递归画出整棵树代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x原创 2020-12-22 16:54:18 · 70 阅读 · 0 评论 -
填充每个节点的下一个右侧节点指针 完美二叉树+普通二叉树
完美二叉树题目:思路:节点的右子节点->节点的next的左子节点代码:/*// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node next; public Node() {} public Node(int _val) { val = _val; }原创 2020-12-11 14:13:50 · 108 阅读 · 0 评论 -
105.从前序与中序遍历序列构造二叉树+106.从中序与后序遍历序列构造二叉树
前序和中序遍历构造二叉树的题目:思路:在任何遍历中,左右子树的长度总相同①因为前序遍历的数组形式是这样的{根节点,{左子树},{右子树}}而中序遍历的数组形式是这样的:{{左子树},根节点,{右子树}}因为此题中所有节点的值均不相同因此可以借助前序遍历数组的第一个节点来找到根节点在中序遍历数组中的索引,进而可以得到左右子树的长度②以此为出发点,构造递归函数,返回的是根节点代码:/** * Definition for a binary tree node. * public cla原创 2020-12-05 19:45:21 · 95 阅读 · 0 评论 -
122.二叉树的路径总和
题目:思路1:迭代迭代:用两个队列来维护整个过程,一个存节点,一个存路径和,同步进出队列当为叶子节点时,判断当前路径总和是否符合要求队列为空时,遍历结束代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } *原创 2020-12-05 16:35:42 · 120 阅读 · 0 评论 -
101.对称二叉树
题目:思路1.迭代:迭代:构造一个队列,其中每对相邻的两个节点值相同的话,则镜像对称在往其中添加节点时,两个节点的左右子节点按相反的顺序插入队列中代码1.迭代:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } *原创 2020-12-05 11:22:49 · 43 阅读 · 0 评论 -
102.二叉树的层序遍历(广度优先遍历BFS----Breadth_First_Search)
题目:思路:利用广度优先遍历的思想,用一个队列来做到层序遍历队列不为空时,每次循环对当前层的节点数做操作,并确定下一层节点代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solut原创 2020-12-04 19:50:39 · 115 阅读 · 0 评论 -
145.二叉树的后序遍历
题目:知识提要:后序遍历的规则是若节点为空,则空操作返回;否则先后序遍历左子树然后后序遍历右子数最后访问根节点代码:递归和前/中序遍历类似,迭代的则需要跟前一个节点比较来避免再次进入右子树/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {}原创 2020-12-03 16:52:50 · 47 阅读 · 0 评论 -
94. 二叉树的中序遍历
题目:知识提要:前序遍历的规则是若节点为空,则空操作返回;否则先中序遍历左子树然后先访问根节点,再中序遍历右子数代码: //迭代 class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<Integer>(); Stack<TreeNode> sta原创 2020-12-03 15:40:16 · 123 阅读 · 1 评论 -
144.二叉树的前序遍历
题目:知识提要:前序遍历的规则是若节点为空,则空操作返回;否则先访问根节点,然后前序遍历左子树再前序遍历右子数代码一:递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val原创 2020-12-03 15:15:44 · 75 阅读 · 0 评论