已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。试设计一个算法,从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。
Posted Roam-G
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。试设计一个算法,从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。相关的知识,希望对你有一定的参考价值。
已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。试设计一个算法,从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。
【解答】
思路: 从i=0开始,首先创建 根结点,并把T[0]的值赋给该结点。
然后递归建立根的左子女,取值为 T[2*i+1].
再递归建立根的右子女,取值为 T[2*i+2]
template <class Type> //建立二叉树
istream& operator >> ( istream& in, BinaryTree<Type>& t )
int n;
cout << "Please enter the number of node : ";
in >> n;
Type *A = new Type[n+1];
for ( int i = 0; i < n; i++ )
in >> A[i];
t. ConstructTree( T, n, 0, ptr );//以数组建立一棵二叉树
delete [ ] A;
return in;
template <class Type>
void BinaryTree<Type> :: ConstructTree ( Type T[], int n, int i, BinTreeNode<Type> *& ptr )
//私有函数 : 将用T[n]顺序存储的完全二叉树, 以i为根的子树转换成为用二叉链表表示的
//以ptr为根的完全二叉树。利用引用型参数ptr将形参的值带回实参。
if ( i >= n ) ptr = NULL;
else
ptr = new BinTreeNode<Type> ( T[i] ); //建立根结点
ConstructTree ( T, n, 2*i+1, ptr->leftChild );
ConstructTree ( T, n, 2*i+2, ptr->rightChild );
以上是关于已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。试设计一个算法,从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。的主要内容,如果未能解决你的问题,请参考以下文章
已知一颗二叉链表表示二叉树T ,编写函数,判断T是不是为完全二叉树。先
已知二叉树采用链表存储结构,根结点指针为T,请写出计算二叉树中度为2的结点数目的非递归算法