ARTS-22 AVL搜索平衡树

简介: ARTS-22 AVL搜索平衡树

这周刷的这道树节点旋转算法题还是有点难度的,关于什么是树节点旋转我结合了下边的这段代码来进行展示:


package 算法部分.综合升级;
import 算法部分.树.BalanceTreeDemo;
/**
 * 给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)
 *
 * @author idea
 * @data 2019/9/18
 */
public class ListToTree {
    TreeNode root;
    class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
            next = null;
        }
    }
    class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x;
        }
    }
    public void insert(int val) {
        if (this.root == null) {
            this.root = new TreeNode(val);
            return;
        }
        TreeNode current = root;
        while (true) {
            if (val < current.val) {
                if (current.left == null) {
                    current.left = new TreeNode(val);
                    break;
                }
                current = current.left;
            } else if (val > current.val) {
                if (current.right == null) {
                    current.right = new TreeNode(val);
                    break;
                }
                current = current.right;
            } else if (current.val == val) {
                System.out.println("已经有重复节点了!");
                return;
            }
        }
    }
    public void readTreeNode(TreeNode treeNode) {
        if (treeNode != null) {
            System.out.print(treeNode.val + "-->");
        } else {
            System.out.print("null");
        }
    }
    /**
     * 前序遍历 根+左+右
     */
    public void preReadNode(TreeNode node) {
        if (node == null) {
            return;
        }
        readTreeNode(node);
        preReadNode(node.left);
        preReadNode(node.right);
    }
    public TreeNode sortedListToBST(ListNode head) {
        return null;
    }
    /**
     * 左左旋
     *
     * @param root
     * @return
     */
    private TreeNode leftLeftRoate(TreeNode root) {
        if (root == null) {
            return null;
        }
        TreeNode originRoot = root;
        TreeNode newRoot = originRoot.left;
        TreeNode newLeftChild = newRoot.right;
        originRoot.left = newLeftChild;
        newRoot.right = originRoot;
        return newRoot;
    }
    /**
     * 左右旋
     *
     * @param root
     * @return
     */
    private TreeNode rightRightRoate(TreeNode root){
        if(root==null){
            return null;
        }
        TreeNode originRoot=root;
        TreeNode newRoot=root.left;
        TreeNode temp=newRoot.right;
        return null;
    }
    public static void main(String[] args) {
        ListToTree listToTree=new ListToTree();
        listToTree.insert(8);
        listToTree.insert(4);
        listToTree.insert(12);
        listToTree.insert(2);
        listToTree.insert(3);
        listToTree.preReadNode(listToTree.root);
        TreeNode newNode = listToTree.leftLeftRoate(listToTree.root);
        System.out.println();
        listToTree.preReadNode(newNode);
    }
}


目录
相关文章
|
6月前
|
Java C++ Python
leetcode-700:二叉搜索树中的搜索
leetcode-700:二叉搜索树中的搜索
417 0
|
存储 算法 C++
一篇文章教会你什么是高度平衡二叉搜索(AVL)树(上)
AVL树的概念 AVL树(Adelson-Velsky and Landis Tree)是计算机科学中最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此
24_二叉搜索树中的搜索
24_二叉搜索树中的搜索
|
1月前
【LeetCode 39】700.二叉搜索树中的搜索
【LeetCode 39】700.二叉搜索树中的搜索
16 0
|
5月前
|
存储 算法 Java
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
|
存储 算法 程序员
深入解析红黑树:自平衡的二叉搜索艺术
深入解析红黑树:自平衡的二叉搜索艺术
68 0
|
存储 测试技术
一篇文章教会你什么是高度平衡二叉搜索(AVL)树(下)
3.3 新节点插入较高左子树的右侧—左右:先左单旋再右单旋
|
存储 编译器 C语言
二叉树搜索
在之前的我们已经学过了普通二叉树,了解了基本的二叉树的结构和基本操作了,不过我们之前的二叉树结构都是使用C语言实现的,我们这次来介绍二叉树中更加复杂的树结构,C语言在实现这些结构已经有些吃力了,更适合我们使用C++来实现。
Leedcode二叉搜索树中的搜索[层序遍历+利用性质]
Leedcode二叉搜索树中的搜索[层序遍历+利用性质]
86 0
Leedcode二叉搜索树中的搜索[层序遍历+利用性质]