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; }
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; }