System.out.printf("%2d is %2d's %6s child\n", tree.key, key, direction == 1 ? "right" : "left"); print(tree.left, tree.key, -1); print(tree.right, tree.key, 1); } } /* * 销毁AVL树 */ private void destroy(Node<T>
avlTree.addNode(11); avlTree.addNode(6); avlTree.deleteNode(9); avlTree.preTraversal(avlTree.root); } 结果如下: 全部源代码 View Code
// AVL树的节点(内部类)classAVLTreeNode<TextendsComparable<T>>{Telement;// 值int height;// 高度AVLTreeNode<T>left;// 左孩子AVLTreeNode<T>right;// 右孩子publicAVLTreeNode(Tkey,AVLTreeNode<T>left,AVLTreeNode<T>right){this.element=key;this.left=left;this.right=right;this.height=0;}}...
节点代码结构 static class TreeNode{ public int val;public int bf;//balance factor 平衡因子 public TreeNode left;//左孩子 public TreeNode right;//右孩子 public TreeNode parent;//父节点 public TreeNode(int val) { this.val = val;} } 实现插入功能 总体思路:1.按照平衡二叉树的比较方式去寻找...
右单旋代码: //右单旋private void rotateRight(TreeNode parent){TreeNode subL = parent.left;TreeNode subLR = subL.right;parent.left = subLR;if(subLR != null){//只有当subLR不为空时,才能修改其父亲节点subLR.parent = parent;}subL.right = parent;//在修改parent的父亲节点时,必须先记录其父...
TreeNode.java public class TreeNode { private int data; private TreeNode leftChild; private TreeNode rightChild; private int height; public int getData() { return data; } public void setData(int data) { this.data = data; } public TreeNode getLeftChild() { ...
接下来小傅哥就分别通过代码讲解下一颗AVL树的左旋、右旋、左旋+右旋、右旋+左旋的代码操作。不要担心这没有多复杂,只要你能搞清楚左旋,就能搞清楚右旋。两旋弄懂组合就没啥难度了。 源码地址:https://github.com/fuzhengwei/java-algorithms 本章源码:https://github.com/fuzhengwei/java-algorithms/tree/main/data...
接下来小傅哥就分别通过代码讲解下一颗AVL树的左旋、右旋、左旋+右旋、右旋+左旋的代码操作。不要担心这没有多复杂,只要你能搞清楚左旋,就能搞清楚右旋。两旋弄懂组合就没啥难度了。 源码地址:https://github.com/fuzhengwei/java-algorithms 本章源码:https://github.com/fuzhengwei/java-algorithms/tree/main/data...
二、AVL树的java实现 1.节点 1.1节点定义 //AVL树的节点(内部类) class AVLTree01Node<T extends Comparable<T>>{ T value; //节点的值 int height; //高度 AVLTree01Node<T> left; //左孩子 AVLTree01Node<T> right; //右孩子 public AVLTree01Node(T value, AVLTree01Node<T> left, AVLTree01...
public class Tree<T extends Comparable<T>> { private static final int MAX_HEIGHT_DIFFERENCE = 1; private Node<T> root; class Node<KT> { KT key; Node<KT> left; Node<KT> right; int height = 1; public Node(KT key, Node<KT> left, Node<KT> right) { ...