int InsertChild_Sq( SqBiTree& T , const int p , const int left_or_right , SqBiTree& insert_subtree )
{
	if( BiTreeEmpty_Sq(T) )
	{
		return 0;
	}

	if( insert_subtree.nodesNum == 0 )
	{
		return 0;
	}

	if( insert_subtree.nodesNum + T.nodesNum > T.nodesCapacity )
	{
		return 0;
	}
	
	if( p < 0 || p >= T.nodesCapacity )
	{
		return 0;
	}

	if( T.nodes[p] == -1 )
	{
		return 0;
	}

	
	
	return 1;
}
int BiTreeDepth_Sq( SqBiTree& T )
{
	if( BiTreeEmpty_Sq(T) )
	{
		return 0;
	}
	return _CalcBiTreeDepth_Sq( T , 0 );
}
int Root_Sq( SqBiTree& T , TElemType& e )
{
	if( BiTreeEmpty_Sq(T) )
	{
		return 0;
	}
	e = T.nodes[0];
	return 1;
}
int Assign_Sq( SqBiTree& T , const int i , const TElemType& e )
{
	if( BiTreeEmpty_Sq(T) )
	{
		return 0;
	}
	if( i >= T.nodesCapacity )
	{
		return 0;
	}
	T.nodes[i] = e;
	return 1;
}
int Value_Sq( SqBiTree& T , const int i , TElemType& e )
{
	if( BiTreeEmpty_Sq(T) )
	{
		return 0;
	}
	if( i >= T.nodesCapacity )
	{
		return 0;
	}

	e = T.nodes[i];
	return 1;
}
int RightChild_Sq( SqBiTree& T , const int i , int& right_indx )
{
	if( BiTreeEmpty_Sq(T) )
	{
		return 0;
	} 
	if( i >= T.nodesCapacity )
	{
		return 0;
	} 
	int right_child_indx = (i<<1)+2;
	if( right_child_indx >= T.nodesCapacity )
	{
		return 0;
	}
	right_indx = right_child_indx;
	return 1;
}
int LeftChild_Sq( SqBiTree& T , const int i , int& left_indx )
{
	if( BiTreeEmpty_Sq(T) )
	{
		return 0;
	} 
	if( i >= T.nodesCapacity )
	{
		return 0;
	} 
	int left_child_indx = (i<<1)+1;
	if( left_child_indx >= T.nodesCapacity )
	{
		return 0;
	}
	left_indx = left_child_indx;
	return 1;
}
Exemple #8
0
int main(int argc, char * argv[]) {
    SqBiTree T;

    printf("初始化空二叉树T...\n");
    InitBiTree_Sq(T);
    printf("\n");

    BiTreeEmpty_Sq(T) ? printf("T为空!\n"):printf("T不为空!\n");
    printf("\n");

    FILE*fp;

    printf("创建二叉树T\n");

    fp = fopen("/Users/zhangyiming/Documents/代码/DataStructure/Tree/SeqBinaryTree/TestData_Le.txt","r");

    CreateBiTree_Le_Sq(fp,T);

    fclose(fp);

    printf("\n");

    printf("打印二叉树\n");

    Print_Sq(T);
    printf("\n");

    printf("T的长度为:%d,depth is :%d",BiTreeLength_Sq(T),BiTreeDepth_Sq(T));

    printf("LevelOrderTraverse T:");

    LevelOrderTraverse_Sq(T,PrintElem);

    printf("\n\n");

    printf("PreOrderTraverse T:");

    PreOrderTraverse_Sq(T,PrintElem,0);

    printf("\n\n");
}
int Parent_Sq( SqBiTree& T , const int i , int& parent_indx )
{
	if( BiTreeEmpty_Sq(T) )
	{
		return 0;
	}

	if( i >= T.nodesCapacity )
	{
		return 0;
	}

	//若该节点索引是根节点则根节点再无父节点
	if( i == 0 )
	{
		return 0;
	}

	parent_indx = (i-1)>>1;
	return 1;
}