顺序存储二叉树和线索化二叉树

举报
周小末天天开心 发表于 2022/12/31 22:52:28 2022/12/31
【摘要】 顺序存储二叉树顺序存储二叉树的概念基本说明:从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。顺序存储二叉树的特点1)顺序二叉树通常只考虑完全二叉树2)第 n 个元素的左子节点为 2 * n + 13)第 n 个元素的右子节点为 2 * n + 24)第 n 个元素的父节点为 (n-1) / 25)n : 表示二叉树中的第几个元素顺序存储二叉树遍...

顺序存储二叉树

顺序存储二叉树的概念

基本说明:从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。

顺序存储二叉树的特点

1)顺序二叉树通常只考虑完全二叉树

2)第 n 个元素的左子节点为 2 * n + 1

3)第 n 个元素的右子节点为 2 * n + 2

4)第 n 个元素的父节点为 (n-1) / 2

5)n : 表示二叉树中的第几个元素

顺序存储二叉树遍历

需求: 给你一个数组 {1,2,3,4,5,6,7},要求以二叉树前序遍历的方式进行遍历。 前序遍历的结果应当为1,2,4,5,3,6,7

public class ArrBinaryTreeDemo {
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5, 6, 7 };
        //创建一个 ArrBinaryTree
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
        arrBinaryTree.preOrder(); // 1,2,4,5,3,6,7
    }
}

//编写一个 ArrayBinaryTree, 实现顺序存储二叉树遍历
class ArrBinaryTree {
    private int[] arr;//存储数据结点的数组
    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }
    
    //重载 preOrder
    public void preOrder() {
        this.preOrder(0);
    }
    
    //编写一个方法,完成顺序存储二叉树的前序遍历
    /**
    *
    * @param index 数组的下标
    */
    public void preOrder(int index) {
    
        //如果数组为空,或者 arr.length = 0
        if(arr == null || arr.length == 0) {
            System.out.println("数组为空,不能按照二叉树的前序遍历");
        }
        
        //输出当前这个元素
        System.out.println(arr[index]);
        
        //向左递归遍历
        if((index * 2 + 1) < arr.length) {
            preOrder(2 * index + 1 );
        }
        
        //向右递归遍历
        if((index * 2 + 2) < arr.length) {
            preOrder(2 * index + 2);
        }
    }
}

线索化二叉树

基本介绍

1)n 个结点的二叉链表中含有 n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向 该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索") 。

2)这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质 的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种 。

3)一个结点的前一个结点,称为前驱结点。

4)一个结点的后一个结点,称为后继结点。

遍历线索化二叉树分析

因为线索化后,各个结点指向有变化,因此原来的遍历方式不能使用,这时需要使用新的方式遍历 线索化二叉树,各个节点可以通过线型方式遍历,因此无需使用递归方式,这样也提高了遍历的效率。 遍历的次 序应当和中序遍历保持一致。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。