DS二叉树——二叉树之数组存储

二叉树可以采用数组的方法进行存储,把数组中的数据依次自上而下,自左至右存储到二叉树结点中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点就在数组中用0来表示。,如下图所示

从上图可以看出,右边的是一颗普通的二叉树,当它与左边的完全二叉树对比,发现它比完全二叉树少了第5号结点,所以在数组中用0表示,同样它还少了完全二叉树中的第10、11号结点,所以在数组中也用0表示。结点存储的数据均为非负整数

输入

第一行输入一个整数t,表示有t个二叉树

第二行起,每行输入一个数组,先输入数组长度,再输入数组内数据,每个数据之间用空格隔开,输入的数据都是非负整数

连续输入t行

输出

每行输出一个示例的先序遍历结果,每个结点之间用空格隔开

样例输入

3

3 1 2 3

5 1 2 3 0 4

13 1 2 3 4 0 5 6 7 8 0 0 9 10

样例输出

1 2 3

1 2 4 3

1 2 4 7 8 3 5 9 10 6

#include<iostream>
using namespace std;
int n;
void first(int a[], int i)
{
    if (i < n)
    {
        if (a[i] != 0)
            cout << a[i] << " ";
        first(a, 2 * i + 1);
        first(a, 2 * i + 2);
    }
}
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int *a;
        cin >> n;
        a = new int[n];
        for (int i = 0; i < n; i++)
            cin >> a[i];
        first(a, 0);
        cout << endl;
    }
}

原文地址:https://www.cnblogs.com/Liu269393/p/10216884.html

时间: 2024-10-02 04:34:06

DS二叉树——二叉树之数组存储的相关文章

基础数据结构-二叉树-拓展:基于数组存储的构建

用数组存储与前文是类似的,只是换了一个储存方式,有兴趣可以看一下下面的代码,具体就不解释了. #include<iostream> #include<string> using namespace std; class BiTreeNode { public: char data; //结点数据 BiTreeNode *LeftChild; //左子树指针 BiTreeNode *RightChild; //右子树指针 BiTreeNode():LeftChild(NULL),Ri

数据结构:二叉树的链式存储

数据结构:二叉树的链式存储(C语言版) 1.写在前面 二叉树同样有两种存储方式,数组和链式存储,对于数组来说,我们利用二叉树的性质然后利用下标可以方便的找到一个节点的子节点和父节点. 二叉树的性质: 1.二叉树的第i层上至多有2i-1个节点 2.深度为K的二叉树至多有2k-1个节点 3.任何一个二叉树中度数为2的节点的个数必度数为0的节点数目少1. 说明:度数为0,为叶子节点. 4.具有n个节点的完全二叉树的深度为|_Log2N_|+1 5.若完全二叉树中的某节点编号为i,则若有左孩子编号为2i

二叉树 二叉树的性质 存储结构 遍历二叉树 C实现二叉树的创建和遍历 线索二叉树

定义 二叉树(binary tree)是n(n>=0)个结点的有限集合,该集合为空集合称为空二叉树,或者有一个根结点和两棵互不相交的,分别称为树根结点的左孩子树和右孩子树组成. 二叉树的特点 每个结点最多有两棵子树,所以二叉树总没有度大于2的结点 左子树和右子树是有顺序的,次数不能任意颠倒 即使树中某结点只有一棵子树,也要区分是左子树还是右子树 特殊的二叉树 1. 斜树 所有的结点都只有左子树的二叉树称为左斜树; 所有的结点都只有右子树的二叉树称为右斜树; 这两者统称为斜树 2. 满二叉树 在一

数据结构--二叉树(定义与存储结构)

什么是二叉树 是具有n个节点的有限集合,由一个根节点和两棵互不相交二叉树组成.如图 从名字简单理解,就是具有2个树叉的树形结构,当然这不是绝对的,正如上图所示,我也可以只有一个树叉. 二叉树具有五种基本形态: (1)空二叉树 (2)只有一个根结点的二叉树 (3)只有左子树 (4)只有右子树 (5)既有左子树又有右子树 完全二叉树 这种二叉树,是二叉树中常用的专业术语,不是说一个完整的二叉树就是完全二叉树,这种二叉树叫满二叉树,如图 简单理解就像图片中,完全二叉树中每个节点的编号,都能映射到满二叉

DS之二叉树

二叉树是另一种树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒. 二叉树可以分为5种基本形态: (1)空二叉树. (2)仅有根结点的二叉树. (3)左子树为空的二叉树. (4)右子树为空空的二叉树. (5)左,右子树均为非空的二叉树. 图示为: 再延伸一下的话就是画出有三个结点的二叉树的基本形态: 满二叉树 一棵深度为k且有(2^K)-1个结点的二叉树称为满二叉树. 完全二叉树 深度为k的,有n个结点的二叉树,当且仅

数据结构——二叉树概述及其数组(顺序存储)表达法

树与二叉树: 什么是树呢?就是一个节点上会有很多分叉的数据结构.一般的,对于一棵树,我们需要的结构体为一个数据块和几个指针块,这就相当于很多个链表交织在了一起,实际上,链表也可以算是一种特殊的树,而我要讲的,也是一种特殊的树--二叉树. 对于树的各个节点,都有两个属性,称为度(degree),他的意思就是这个节点所拥有的子节点的数量.还有一个属性,称为深度(depth),指节点到根的距离. 什么是二叉树呢?顾名思义,就是度为二的树,它长这样: 如图所示,在链表中我们需要头(head),而在树中我

二叉树的链式存储结构--二叉链表

1 二叉树的链式存储结构 //二叉链表的结点结构定义 typedef struct BiTNode { int data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode; typedef struct BiTNode *BiTree; 结构示意图如下: 2 二叉树的遍历方法 (1)前序遍历:先访问根结,然后前序遍历左子树,再前序遍历右子树. (2)

数据结构之---C语言实现二叉树的三链表存储表示

//二叉树的三叉链表存储 //杨鑫 #include <stdio.h> #include <stdlib.h> #define max(a, b) a > b ? a : b #define ClearBiTree DestroyBiTree typedef char TElemType; // 二叉树的三叉链表存储表示 typedef struct BiTPNode { TElemType data; struct BiTPNode *parent,*lchild,*rc

二叉树的三叉链表存储及其Java实现

三叉链表存储的思想是让每个节点持有三个引用parent.left.right,分别指向其父节点.左子节点和右子节点.如下图所示: 因此,三叉链表存储的节点大致如: class Node{ T data; Node parent; Node left; Node right; } Java实现代码: package com.liuhao.DataStructures; import com.liuhao.DataStructures.TwoLinkBinTree.TreeNode; public