最新排序二叉树JAVA版实现,进阶学习资料

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • @return

*/

public boolean add(E e) {

if(e == null) return false;

if(root == null ) {

root = new TreeNode(e, null);

return true;

}

add0(root, e);

return true;

}

/**

  •                      10
    
  •                 /          \
    
  •                3           18
    
  •              /   \        /   \               
    
  •             2     4      13    21       
    
  •                     \
    
  •                      9
    
  •                    /   \
    
  •                   8     9 
    
  • @param root

  • @param e

*/

private TreeNode add0(TreeNode root, E e) {

final TreeNode curNode = root;

int cmp = compare(e, curNode.value);

if(cmp < 0 ) { //表示待插入的节点值,比当前节点值小

if(curNode.left == null) {

//创建当前节点的左节点

TreeNode newNode = new TreeNode(e, curNode);

curNode.left = newNode;

return newNode;

} else {

return add0(curNode.left, e);//遍历左子树

}

} else { // 大于等于0,右子树

if(curNode.right == null ) {

//创建当前节点的右节点

TreeNode newNode = new TreeNode(e, curNode);

curNode.right = newNode;

return newNode;

} else {

return add0(curNode.right, e);//遍历右子树

}

}

}

/**

  • 比较两个元素的大小

  • @param e1

  • @param e2

  • @return

*/

@SuppressWarnings(“unchecked”)

private int compare(E e1, E e2) {

return comparator == null ? ((Comparable) e1 ).compareTo(e2) : comparator.compare(e1, e2);

}

/**

  • 删除元素

  • @param e

  • @return 如果返回ture,表示删除成功,如果返回false,表示删除失败,没有找到元素

*/

public boolean remove(E e) {

if( e == null ) return false;

TreeNode cur = root;

int cmp;

while (cur != null ) {

if(e.equals(cur.value)) {

break;

}

cmp = compare(e, root.value);

if(cmp < 0 ) { //表示待删除的节点值,比当前节点值小

cur = cur.left;

} else {

cur = cur.right;

}

}

if(cur != null ) { //找到了元素,需要删除该元素

TreeNode cLeft = cur.left;

TreeNode cRight = cur.right;

if(cLeft != null ) { //如果被删除节点的左子树不为空,则将左子树放入当前节点的位置

remove0(cLeft, cur);

if(cLeft.right != null && cur.right != null) { //需要移动相应节点

TreeNode wNode = cLeft.right;

cLeft.right = cur.right;

wNode.parent = null;

TreeNode newNode = add0(cLeft, wNode.value);

newNode.left = wNode.left;

newNode.right = wNode.right;

wNode = null;

}

} else {

remove0(cRight, cur);

}

//将当前节点释放,,help GC

cur.value = null;

cur.right = null;

cur.left = null;

cur.parent = null;

cur = null;

return true;

}

return false;

}

private void remove0(TreeNode newNode, TreeNode cur) {

TreeNode parent = cur.parent;

newNode.parent = parent;

if(cur.parent.left == cur) {

cur.parent.left = newNode;

} else {

cur.parent.right = newNode;

}

}

/**

  • 中序遍历

*/

public void middleOrderTraversal() {

System.out.println(“----------中序遍历开始---------\n”);

if (root == null) {

System.out.print(“二叉树”);

System.out.println(“----------中序遍历结束---------\n”);

return;

}

middleOrderTraversal0(root);

System.out.println(“\n----------中序遍历结束---------\n”);

}

/**

  • 中序遍历

*/

private void middleOrderTraversal0(TreeNode root) {

if (root == null)

return;

final TreeNode cur = root;

if (cur.left != null) {

middleOrderTraversal0(cur.left);

System.out.print(toObjectString(cur.value) + “,”);

middleOrderTraversal0(cur.right);

} else if (cur.right != null) {

System.out.print(cur.value + “,”);

middleOrderTraversal0(cur.right);

} else {

// 此时输出节点

System.out.print(cur.value + “,”);

}

}

public TreeNode getRoot() {

return root;

}

public void setRoot(TreeNode root) {

this.root = root;

}

private String toObjectString(E value) {

return value == null ? “” : value.toString();

}

/**

  • 二叉数

  • @author Administrator

  • @param

*/

@SuppressWarnings(“unused”)

private final static class TreeNode implements Serializable {

private static final long serialVersionUID = 6540618639489225256L;

public E value;

public TreeNode left;

public TreeNode right;

public TreeNode parent;

public TreeNode(E value, TreeNode parent) {

super();

this.value = value;

this.parent = parent;

}

public TreeNode(E value, TreeNode left, TreeNode right, TreeNode parent) {

super();

this.value = value;

this.left = left;

this.right = right;

this.parent = parent;

}

@Override

public String toString() {

if(value != null)

return value.toString();

return super.toString();

}

}

/** *******************测试 start ***************************/

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(“测试开始”);

// BinaryTree t = new BinaryTree();

// t.setRoot(t.initTree());

// t.middleOrderTraversal();

//先研究一下 Comparator o1 > o2 的排序逻辑

//testSort();

/* * 10

  •                 /              \
    
  •                3                18
    
  •              /   \            /   \               
    
  •             2     4          13    21       
    
  •                     \       /  \  
    
  •                      9     11    15  
    
  •                    /   \
    
  •                   8     9 
    

*/

// add 方法测试

BinaryTree t = new BinaryTree();

// t.add(new Integer(10));

// t.add(new Integer(18));

// t.add(new Integer(3));

// t.add(new Integer(2));

// t.add(new Integer(4));

// t.add(new Integer(8));

// t.add(new Integer(9));

// t.add(new Integer(9));

// t.add(new Integer(21));

// t.add(new Integer(13));

写在最后

为了这次面试,也收集了很多的面试题!

以下是部分面试题截图

Java程序员秋招三面蚂蚁金服,我总结了所有面试题,也不过如此

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

er(3));

// t.add(new Integer(2));

// t.add(new Integer(4));

// t.add(new Integer(8));

// t.add(new Integer(9));

// t.add(new Integer(9));

// t.add(new Integer(21));

// t.add(new Integer(13));

写在最后

为了这次面试,也收集了很多的面试题!

以下是部分面试题截图

[外链图片转存中…(img-EKmr8sKJ-1715673552161)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值