线索化二叉树

本文介绍了顺序存储二叉树的概念,它基于完全二叉树的特性,通过数组来存储和遍历二叉树,是堆排序的基础。接着探讨了线索化二叉树,通过线索指针利用二叉树节点的左右指针指向前驱和后继节点,提高遍历效率。示例代码展示了如何实现先序遍历。线索化二叉树在实际应用中,如堆排序中发挥重要作用。
摘要由CSDN通过智能技术生成

先看看顺序存储二叉树

顺序存储二叉树
说明:从数据存储来看,数组存储方式和树存储方式相同,树也可以转化为数组
现在我们需要将二叉树以数组方式存储,(基于完全二叉树的特点)
理解顺序存储二叉树的特点!!!!!
例如:第二个(从0开始)节点元素的左子节点对应其在数组的下标为5,对应图中的第5未,值为6
按照其下标进行创建和遍历
利用的是完全二叉树的性质
在这里插入图片描述

package x;
public class ArraBinaryTree {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7};
        BinaryTree binaryTree = new BinaryTree(arr);
        binaryTree.preOrder();//利用重载,自动传入根节点
    }
}
class BinaryTree{
    private int[]arr;//存储数据节点的数组
    public BinaryTree(int []arr){
        this.arr=arr;
    }
    public void preOrder(){
        preOrder(0);
    }
    //先序遍历,index表下标
    public void preOrder(int index){
        if (arr==null||arr.length==0){
            System.out.println("数组为空");
        }
        System.out.print(arr[index]);
        //向左
        if (2*index+1<arr.length){
            preOrder(2*index+1);
        }
        //向右
        if (2*index+2<arr.length){
            preOrder(2*index+2);
        }
    }
}

顺序存储二叉树是学习堆排序的基础!!!

什么是线索化二叉树

线索化二叉树
在这里插入图片描述

说明:在我们遍历二叉树时最后一层节点的左右指针没有指向的节点,我们现在希望能充分利用每个节点的左右指针
使其能够指向该节点的前驱和后继节点。
(注意节点的左右指针可能指向左子树或前驱后继节点)
核心方法

 //线索化左子树
    treadNode(node.getLeft());
    //线索化当前节点
    if (node.getLeft() == null) {
        //将当前节点的左指针指向前驱节点
        node.setLeft(prenode);
        node.setleftType(1);
    }
    //线索化右子树
    if (prenode.getRight() == null && prenode != null) {
        prenode.setRight(node);
        prenode.setrightType(1);
    }
    //!!!!!每处理完一个节点后,让当前节点是下一个节点的前驱节点
    prenode = node;

树结构实际应用堆排序
堆排序基于顺序化二叉树进行调整

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值