二叉树
无心浪人
这个作者很懒,什么都没留下…
展开
-
二叉搜索树
文章目录什么是二叉搜索树什么是二叉搜索树二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3.它的左右子树也分别为二叉搜索树,不能放重复的元素如下图就是一颗二叉搜索树:class BinarySearchTree { static class BSNode { public int val; publi原创 2021-03-18 19:53:54 · 90 阅读 · 0 评论 -
根据二叉树创建字符串
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。class Solution { public void tree2strChild(TreeNode t,StringBuilder sb) { if(t == null) return; sb.append(t.val); if(t.left == null原创 2021-03-13 20:55:29 · 119 阅读 · 1 评论 -
根据一棵树的前序遍历与中序遍历构造二叉树、根据一棵树的中序遍历与后序遍历构造二叉树。
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:class Solution { public int preIndex = 0; //preIndex遍历前序数组的标记 public TreeNode buildTreeChild(int[] preorder, int[] inorder,int原创 2021-03-13 16:40:54 · 333 阅读 · 0 评论 -
二叉搜索书与双向列表
什么事二叉搜索树?根的左边比根小,根的右边比根大的树且它的每个子树都满足这个条件,二叉搜索树的中序遍历时有序的输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:public class Solution { public TreeNode prev = null;//上一次打印的节点 public void ConvertChild(TreeNode pCur) { //ConvertChild方法进行原创 2021-03-13 15:08:21 · 99 阅读 · 1 评论 -
二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3思路:class Solution { public TreeNo原创 2021-03-13 12:19:00 · 82 阅读 · 0 评论 -
创建二叉树
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。示例1输入abc##de#g##f###输出原创 2021-03-13 12:03:52 · 1730 阅读 · 0 评论 -
非递归实现遍历二叉树
// 前序遍历 void preOrderTraversalNor(BTNode root) { if(root == null) return; Stack<BTNode> stack = new Stack<>(); BTNode cur = root; while (cur != null || !stack.isEmpty()) { while (cur != null) { .原创 2021-03-13 09:26:44 · 124 阅读 · 0 评论 -
判断一颗二叉树是不是完全二叉树
类似于测序遍历,用队列实现(先进后出)1、如果根不为空,那么根入队2、判断队列是否为空,不为空,则将队头元素出队并保存在临时变量cur里,3、判断cur是否为空,若不为空,则将cur的左右子树都放到队列里,如果子树为空,就往队列里插入null。若为空,则直接停止出队,然后看队列里是否还有不是null的元素,若没有,则该树是一颗完全二叉树,否则不是。// 判断一棵树是不是完全二叉树 boolean isCompleteTree(BTNode root) { if(root ==原创 2021-03-13 00:12:07 · 179 阅读 · 0 评论 -
二叉树的层序遍历
用队列实现(先进后出)1、如果根不为空,那么根入队2、如果队列不为空,则将队头元素保存在临时变量cur里,并打印,3、判断cur的左右子树是否为空,不为空则入队4、如果队列为空,则表示遍历结束。 // 层序遍历 void levelOrderTraversal(BTNode root) { if(root == null) return; Queue<BTNode> queue = new LinkedList<>();原创 2021-03-12 22:28:24 · 115 阅读 · 0 评论 -
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。原创 2021-03-12 22:05:30 · 88 阅读 · 0 评论 -
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。如下图就是一颗对称二叉树。思路:判断树的左右子树是否对称,在判断左子树的左子树是否与右子树的右子树对称,判断右子树的左子树是否与左子树的右子树对称,若都满足则该树是对称的,否则不对称class Solution {public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree) { if(leftTree == null && rightTree !=原创 2021-03-10 21:59:11 · 230 阅读 · 0 评论 -
相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。思想:先判断根是否相等,不相等直接为false,然后递归判断p的左数是否与q的左树相等且p的右树是否与q的右树相等,都相等则为true:class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p == null && q != null原创 2021-03-09 22:43:57 · 95 阅读 · 0 评论 -
二叉树的前中后序排序(递归)
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。方法一class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); preorder(root, res); return res; } public voi原创 2021-03-09 20:56:16 · 233 阅读 · 0 评论 -
创建二叉树
创建如下的一棵树,然后进行遍历,并求树的节点数,叶子节点数,层数以及每层有多少个节点class BTNode { public char val; public BTNode left;//左子树的引用 public BTNode right;//右子树的引用 public BTNode(char val) { this.val = val; }}public class BinaryTree { public BTNode cre原创 2021-03-09 20:14:54 · 265 阅读 · 0 评论 -
树与二叉树
文章目录树树的概念树的特点 有关树的一些概念树的表示形式二叉树二叉树概念:二叉树的特点:二叉树的五种基本形态两种特殊的二叉树二叉树的性质二叉树的存储二叉树的遍历树树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 例如这样的就不是树树的特点 有一个特殊的节点,称为根节点,根节点没有前驱节点 除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1T2、…、Tm原创 2021-01-29 21:57:15 · 288 阅读 · 0 评论