已知一棵完全二叉树存放于一个一维数组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的结点数目的非递归算法

LeetCode 222. Count Complete Tree Nodes

二叉树——求一棵完全二叉树节点的个数

用一维数组构建不完全二叉树