DFS算法之无序列表转换为平衡二叉搜索树
题目简介:给定一个单链表,其中的元素不是有序排列的,将其转换为高度平衡的BST(二叉搜索树)。
思路:我的思路就是一次遍历单链表,每遍历一个元素,就将其插入树中。在插入的过程中,先找到应该插入的位置,然后在判断树的高度看是否应该进行调整树使其依然保持平衡二叉树的特性,一次进行下去,最终的树就是一个平衡二叉搜索树。
源码:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {//链表节点转换为平衡二叉树public TreeNode sortedListToBST(ListNode head){TreeNode root=null;while(head!=null){if(root!=null)System.out.print("head.val:"+head.val+" "+"root.val:"+root.val);root=insertNode(root,head.val);head=head.next;}if(root==null){System.out.println("root is null");}return root;}//向二叉树中插入节点,这个过程要判断是否要进行调整树public TreeNode insertNode(TreeNode root,int val){System.out.println();if(root==null){root=new TreeNode(val);return root;}TreeNode node=root;System.out.println(node.val);while(root!=null){if(root.val>val){if(root.left==null){root.left=new TreeNode(val);root=null;}elseroot=root.left;}else {if(root.right==null){root.right=new TreeNode(val);root=null;}elseroot=root.right;}}///判断该树是否需要进行调整高度int leftHigh=0;int rightHigh=0;leftHigh=high(node.left);rightHigh=high(node.right);System.out.println("leftHigh:"+leftHigh+" rightHigh:"+rightHigh);//左调if(leftHigh>rightHigh+1){root=node.left;node.left=root.right;root.right=node;return root;}//右调else if(leftHigh+1<rightHigh){root=node.right;node.right=root.left;root.left=node;System.out.println("root:"+root.val);return root;}return node;}public int high(TreeNode node){if(node==null){return 0;}int max=0;max=Math.max(1+high(node.left), 1+high(node.right));return max;}}
DFS算法之无序列表转换为平衡二叉搜索树相关推荐
- 看动画学算法之:平衡二叉搜索树AVL Tree
简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表.从而导致搜索的时间复 ...
- 数据结构与算法-平衡二叉搜索树
平衡二叉搜索树 1.自平衡的二叉搜索树 2.平衡 (1)空树平衡 (2)非空树平衡 左右子树平衡 左右子树高度差绝对值 <= 1 3.平衡因子 左右子树的高度差的衡量值 -1 0 1 (一)平衡 ...
- 红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明
红黑树 平衡二叉搜索树 什么是红黑树? (What is a Red-Black Tree?) Red-Black Tree is a type of self-balancing Binary Se ...
- 《恋上数据结构第1季》平衡二叉搜索树、AVL树
AVL树 二叉搜索树缺点分析 改进二叉搜索树 平衡(Balance) 理想平衡 如何改进二叉搜索树? 平衡二叉搜索树(Balanced Binary Search Tree) AVL树 BST 对比 ...
- 二叉搜索树(平衡二叉搜索树)
二叉搜索树 1.验证是否为二叉搜索树 中序遍历看是否为递增序列 2.平衡二叉搜索树 将升序序列转为二叉平衡搜索树 /***树的结构体* Definition for a binary tree nod ...
- VC++2012编程演练数据结构《9》平衡二叉搜索树
平衡二叉搜索树 任何结点的左子树和右子树高度最多相差1的二叉搜索树. (1)AVL树的插入算法 a. 插入结点之后仍然是AVL树,则不调整: b. 插入结点之后不再满足AVL树条件,则进行调整,根据导 ...
- 二叉搜索树、平衡二叉搜索树和红黑树
文章目录 一. 二叉搜索树(Binary Sort Tree) 二. 二叉平衡搜索树(AVL) 三. 红黑树 一. 二叉搜索树(Binary Sort Tree) 二叉搜索树,又称为二叉排序树(二叉查 ...
- 最适合新手看的平衡二叉搜索树(BBST)的创建,包含详细过程,一看就会(C++版)
写在前面:本人大二小白,本篇文章是我第一次写博客,用来记录我的学习过程,我想将我在学习中遇到的各种的问题和困难写下来,希望大家能够不要犯同样的错误.我会尽可能的详细的把每一个步骤都解释清楚,那么废话不 ...
- 牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案
牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案 题目描述 给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST). 题解: 二叉搜索树的定义: 二叉搜索树或者是一棵空树,或者是具有下 ...
最新文章
- 吴恩达:AI未来将呈现四大发展趋势
- 《科学》封面特别报道:人类登月50年
- 开源如此火热,但研究表明该领域已不再增长
- mysql按升序创建索引_Mysql中的降序索引底层实现
- Android开发文章推荐
- 使用 Apache Commons CLI 开发命令行工具
- Spring JDBC 框架一个最简单的Hello World级别的例子
- 微软开源P语言,实现安全的异步事件驱动编程
- 浅析Kubernetes Pod重启策略和健康检查
- span标签的鼠标滑入提示_彻底搞懂拖拽——基于鼠标事件的拖拽以及基于HTML5 API的拖拽...
- conda和Anaconda的区别:
- Anaconda基础命令总结
- 3. 使用Keras-神经网络来拟合非线性模型
- java计算机毕业设计跨境电商网站源码+系统+数据库+lw文档+mybatis+运行部署
- 许愿墙|爱墙 js代码
- matlab误码率理论,QDPSK理论误码率与实际误码率matlab仿真程序
- 计算机基础教案8,计算机应用基础教案8.2修饰演示文稿
- android平板电脑汉语字体,动动手换字体:让Android平板电脑更漂亮
- oracle hint 强制索引
- 台积电版的骁龙8G1+即将发布,参数惊人,但是骡子是马得遛遛再说