树
树
jay编程
这个作者很懒,什么都没留下…
展开
-
Java实现给你一个数组,生成一个对应的二叉树
标题:Java实现给你一个数组,生成一个对应的二叉树测试用例:用的是层次遍历的思想:层次遍历,一种不带返回值的,一种带返回值的【比前一种多了些思考】层次遍历的代码://层次遍历 public void levelOrder(TreeNode root){// Deque<TreeNode> s = new LinkedList<>(); Queue<TreeNode> q = new LinkedList<>原创 2022-03-03 17:31:37 · 10412 阅读 · 2 评论 -
简单的后序非递归遍历
标题:简单的后序非递归遍历/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeN原创 2021-08-05 18:04:31 · 50 阅读 · 0 评论 -
Java实现判断一棵树是否为BST二叉搜索树
标题:Java实现判断一棵树是否为BST二叉搜索树题目:判断是否为二叉搜索树98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \原创 2020-12-06 21:10:03 · 949 阅读 · 2 评论 -
Java实现广度遍历二叉树2
标题:Java实现广度遍历二叉树2//12.6/*题目:二叉树的层次遍历*//*方法一:迭代*/ public List<List<Integer>> levelOrder(TreeNode head){ List<List<Integer>> alist = new ArrayList<>(); if(head == null){ return alist; } Queue<TreeNode> q =原创 2020-12-06 19:51:43 · 70 阅读 · 0 评论 -
Java实现二叉树的先中后序遍历2
标题:Java实现二叉树的先中后序遍历2/* 12.6题目:二叉树前序遍历*//*方法一:递归*/public void preorder(TreeNode head, List<Integer> list){ if(head == null){ return ; }else{ list.add(head.val); this.preorder(head.left, list); this.preorder(head.right, list); }}原创 2020-12-06 19:48:26 · 67 阅读 · 0 评论 -
Java实现二叉搜索树的最近祖先节点
标题:Java实现二叉搜索树的最近祖先节点一、题解1) 方法一:得到两个list执行用时:8 ms, 在所有 Java 提交中击败了14.00% 的用户内存消耗:39.3 MB, 在所有 Java 提交中击败了92.33% 的用户/* 方法一:得到两个list 执行用时:8 ms, 在所有 Java 提交中击败了14.00% 的用户 内存消耗:39.3 MB, 在所有 Java 提交中击败了92.33% 的用户 */ public TreeNode commonBstNode(TreeN原创 2020-11-24 18:04:15 · 98 阅读 · 0 评论 -
Java,实现得到二叉树的最近公共祖先节点
标题:Java,实现得到二叉树的最近公共祖先节点一、方法四种:首先做这个题目,感觉知道这个会比较好://供参考的后序迭代输出二叉树的所有节点//供参考的后序迭代输出二叉树的所有节点public void postOrder(TreeNode head){ if(head == null){ return ; } Deque<TreeNode> s = new LinkedList<>(); s.push(head); while(!s.isEmpty()){原创 2020-11-24 14:46:21 · 519 阅读 · 0 评论 -
得到bst的公共最近祖先节点
标题:得到bst的公共最近祖先节点bst最近公共祖先节点方法一:得到两个list,【通过bst的搜索直接得到list保存父节点的集合】,使用一个for循环important方法二;通过bst的搜索特性,这个递归有点意思,/** * bst最近公共祖先节点 * 方法一:得到两个list,【通过bst的搜索直接得到list保存父节点的集合】,使用一个for循环important * 方法二;通过bst的搜索特性,这个递归有点意思, * * @author dell * */publ原创 2020-11-23 11:40:08 · 113 阅读 · 0 评论 -
Java实现: 找到数组中第k大的元素【待续】
java 实现: 找到数组中第k大的元素 【待续】好像要用堆排序,才快,涉及到了堆排序, 【最优,待续】下面的可以做,不过不优TreeNode(得到list,直接做),TreeNode ,每次得到从右向左的中序,找到第k个最大的即可快速排序直接做,每回直接将list排序,找到第k个最大的 /* 题目二: 方法一:## 找到数组中第k大的元素 每次add时,将val添加到TreeNode中,使用中序遍历的逆序,取得第k大的元素 执行用时:2562 ms, 在所有 Java 提交原创 2020-11-23 11:38:45 · 374 阅读 · 0 评论 -
java实现二叉树的先中后序遍历
标题:java实现二叉树的先中后序遍历package com.hhh.aa.basicTreeBST03;import java.util.ArrayList;import java.util.Deque;import java.util.Iterator;import java.util.LinkedList;import java.util.Queue;import org.junit.Test;import com.hhh.aa.basicTree02.TreeNode;/*原创 2020-11-22 15:11:29 · 79 阅读 · 0 评论 -
java实现判断是否为二叉搜索树
标题:java实现判断是否为二叉搜索树一、分析1)第一种:对于二叉搜索树,首先想到的的是中序遍历,得到的是一个有序序列。所以方法可以是使用中序的递归,非递归进行实现,只要看是否为有序即可。方法一:中序非递归遍历,保存最小值为long cur = Long.MIN_VALUE;每次遍历得到一个节点的值时,比较是否大于当前最小值cur,满足条件则更新当前最小值。/** * 使用非递归实现 迭代版的【非递归中序遍历】,简单,容易实现 * 执行用时:2 ms, 在所有 Java 提交中击败原创 2020-11-20 10:49:03 · 1448 阅读 · 0 评论 -
Java实现填充每个节点的下一个右侧节点指针,对于不是完美二叉树而言
标题:Java实现填充每个节点的下一个右侧节点指针,对于不是完美二叉树而言可以先看看这个:Java实现填充每个节点的下一个右侧节点指针,对于完美二叉树而言一、题解方法:其实挺有巧劲的/** * 测试不完美二叉树 * 执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户内存消耗:38.3 MB, 在所有 Java 提交中击败了86.90% 的用户 * @param head * @return */ public Node hasNext(Node hea原创 2020-11-16 17:02:29 · 62 阅读 · 0 评论 -
Java实现填充每个节点的下一个右侧节点指针,针对完美二叉树而言
标题:Java实现填充每个节点的下一个右侧节点指针一、题解方法一:这个题目的题解,首先会想到用广度遍历实现(非递归版本的),不过这个把每一行二叉树的节点当作链表,更有想法,同时也更优/** * 执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户内存消耗:38.5 MB, 在所有 Java 提交中击败了88.17% 的用户 * @param head * @return */ public Node hasNext(Node head) { if(head原创 2020-11-16 16:59:40 · 78 阅读 · 0 评论 -
Java实现前序,中序得到二叉树
标题:Java实现前序,中序得到二叉树其实把中序,后序的改一下递归调用的条件就行了可以先了解Java实现通过中序,后序得到二叉树/** * 测试前中 * @author dell * */public class TestPreInOrder { /** *前中 使用递归 *执行用时:5 ms, 在所有 Java 提交中击败了28.63% 的用户内存消耗:38.3 MB, 在所有 Java 提交中击败了96.02% 的用户 * @return */ public Tr原创 2020-11-16 16:51:14 · 159 阅读 · 0 评论 -
Java实现通过中序,后序遍历得到二叉树
标题:Java实现通过中序,后序遍历得到二叉树一、题解方法一:使用递归,很容易想到/** *中后 *执行用时:4 ms, 在所有 Java 提交中击败了45.70% 的用户内存消耗:38.2 MB, 在所有 Java 提交中击败了99.17% 的用户 * @return */ public TreeNode inPostOrder(Integer[] a, Integer[] b, int as, int ae, int bs, int be) { if(as > ae原创 2020-11-16 16:48:03 · 212 阅读 · 0 评论 -
Java实现:最近公共祖先节点
标题:Java实现:最近公共祖先节点一、方法一 ,很容易想到,但不是最优解思想:找到两个满足条件的节点,得到他们的祖先节点1).使用非递归的后序遍历实现【因为先序遍历,直接删节点就行了,不需要后序遍历那么的麻烦,中序也同样】2)eg:栈中为:1-> 2 -> 3 那么说此节点数组中存放的为3,2,1因为 这样才是最近的公共祖先节点【注意:要包含自身】3)最后通过两个for循环,得到TreeNode/* * 使用后序遍历,得到两个链表 * * 执行用时:44 ms,原创 2020-11-13 12:28:51 · 594 阅读 · 0 评论 -
Java输出字符串的全排列
标题:Java输出字符串的全排列/** * 全排列 【待续】 * @author dell * */public class TestAllSort { /** * int[] * 输出ABCD后,不会输出AB,只会输出DC * @param s * @param count * @param a */ public void allSort(String s, int count, int[] a) { if(count >= 4) { Syst原创 2020-10-22 17:59:21 · 218 阅读 · 0 评论 -
Java求解对称二叉树
标题:Java求解对称二叉树public class TestSymmetricBinaryTree03 { /** * 使用递归测试对称二叉树 * 思想: * p * 1)p.left == p.right * 2)右子树 对称 左子树 * @param p * @return */ public boolean symmetricBinaryTree(TreeNode p) { if(p == null) { return true; } re原创 2020-10-22 17:58:07 · 65 阅读 · 0 评论 -
Java实现求二叉树路径总和
标题:Java实现求二叉树路径总和public class TestPathSum02 { /** * 使用广度遍历, * */ public boolean pathSum(TreeNode p, int target) { if(p == null) { return false; } Queue<TreeNode> q = new LinkedList<>(); q.offer(p); while(!q.isEmpty())原创 2020-10-22 17:57:02 · 471 阅读 · 0 评论 -
Java实现求二叉树的最大深度
标题:Java实现求二叉树的最大深度public class TestMyTreeMaxLength12 { /** * 【递归】 * 执行结果: 通过 显示详情 执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户 内存消耗:38.7 MB, 在所有 Java 提交中击败了81.41% 的用户 * @param p */ public int maxLen(IntNode p, int count) { if(p == null) { retu原创 2020-10-22 17:56:03 · 476 阅读 · 0 评论 -
Java实现广度遍历二叉树
标题:Java实现广度遍历二叉树public class TestMyTreeBroad12 { /**方法一:不保存二叉树节点【使用递归】 * 我写的另一种递归 * 不过队列q要先赋值 【使用下面的函数hh】 * @param q */ public void boradorder(Queue<IntNode> q) { if(q.isEmpty()) { return ; }else { IntNode p = q.peek(); S原创 2020-10-22 17:54:36 · 261 阅读 · 0 评论 -
java实现二叉树的后序遍历
标题:java实现二叉树的后序遍历/** * 我的二叉树 【后序遍历】 * @author dell * */public class TestMyTreeB03 { /** * 测试遍历二叉树的后序遍历【先输出节点的值】 * @param p */ public void backorder(IntNode p) { if(p == null) { return ; }else { this.backorder(p.left); this.backo原创 2020-10-22 17:51:11 · 296 阅读 · 0 评论 -
Java实现二叉树的中序遍历
标题:Java实现二叉树的中序遍历/** * 我的二叉树 【中序遍历】 * @author dell * */public class TestMyTreeB02 { /** * 测试遍历二叉树的中序遍历【先输出节点的值】 * @param p */ public void midorder(IntNode p) { if(p == null) { return ; }else { this.midorder(p.left); System.out.p原创 2020-10-22 17:50:33 · 776 阅读 · 0 评论 -
Java实现二叉树的先序遍历含递归,非递归,Morris
标题:Java实现二叉树的先序遍历/** * 我的第一个二叉树 * @author dell * */public class TestMyTreeB { /** * 测试遍历二叉树的先序遍历【先输出节点的值】 * @param p */ public void preorder(IntNode p) { if(p == null) { return ; }else { System.out.print(p.val + " "); this.preord原创 2020-10-22 17:49:54 · 140 阅读 · 0 评论