
树
圆滚滚的柴柴
这个作者很懒,什么都没留下…
展开
-
牛客 剑指offer:平衡二叉树
题目: 平衡二叉树思路: dfs深搜递归函数返回深度,判断左右子树的深度差是否大于1。代码:public class Solution { public boolean result = true; public boolean IsBalanced_Solution(TreeNode root) { dfs(root); return result; } public int dfs (TreeNode root) {原创 2021-05-07 17:14:56 · 116 阅读 · 0 评论 -
牛客 剑指offer:树的直径
题目:树的直径思路: dfs。首先,从任意一个节点开始深搜,找到权重最大的一条路径的末尾节点;从该节点开始,深搜,找到权重最大的路径即为所求。主要的点:图的表示权重的存储:不可以用二维矩阵,内存会溢出。深搜避免找回父节点代码:import java.util.*;/* * public class Interval { * int start; * int end; * } */public class Solution { /** *原创 2021-05-06 17:23:35 · 126 阅读 · 0 评论 -
牛客 剑指offer:最近公共祖先
题目:最近公共祖先思路1:在某个节点小找是否包含某个子节点很容易,所以我们可以对所有节点,判断是否包含给定的两个节点,取最近的即可。这个方法可以AC,但其实,两个递归做了很多重复的运算。思路2:其实,祖先节点只有如下三种情况两个节点分别在祖先节点两侧;a节点就是他们的祖先,b节点在a的左子树或右子树;b节点就是他们的祖先,a节点在b的左子树或右子树;我们从头深搜二叉树,如果root节点为空, 或者当前root节点等于两个节点其中一个,就返回当前节点root;递归对root左子树、r原创 2021-04-15 11:20:58 · 170 阅读 · 0 评论 -
牛客 剑指offer:判断二叉树是否为搜索二叉树和完全二叉树
题目:判断二叉树是否为搜索二叉树和完全二叉树思路:判断搜索二叉树:递归。递归函数返回是否是搜索二叉树;递归函数内部需要完成左子树、根、右子树的大小对比。判断完全二叉树:算法摘自百度百科。代码:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solutio原创 2021-03-18 17:30:37 · 134 阅读 · 1 评论 -
牛客 剑指offer:二叉树镜像
题目:二叉树镜像思路:递归。递归函数返回的是已经镜像好的树;递归函数要做的是交换已经镜像好的左右子树。代码:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */p原创 2021-03-18 16:50:14 · 124 阅读 · 0 评论 -
牛客 剑指offer:二叉树的之字形遍历
题目:二叉树的之字形遍历思路:借助队列。队列实现层序遍历,然后反转奇数行。代码:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param root TreeNode类 * @原创 2021-03-18 16:09:27 · 121 阅读 · 0 评论 -
牛客 剑指offer:实现二叉树先序,中序,后序遍历
题目:实现二叉树先序,中序,后序遍历思路:递归。本来我的想法是写三个递归函数分别实现,但其实一个递归函数就足够了。代码:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param root原创 2021-03-17 18:03:33 · 130 阅读 · 0 评论 -
牛客 剑指offer:根据前序后序重建二叉树
题目:重建二叉树思路:对于前序遍历,根节点必定第一个出现;对于中序遍历,根节点的左子树的所有结点必定在根节点的左侧,右子树的所有结点必定在根节点的右侧。代码:/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */impor原创 2021-03-02 14:45:51 · 162 阅读 · 0 评论