是需要一层一层处理的问题二叉树的问题,都可以借助一个队列来实现。
/* 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点) */
single_list_node* LevelOrder_Walk_With_Queue(bstNode* root)
{
queue* qu = CreateQueue();
single_list_node* head = NULL;
bstNode* p = root;
if(NULL == p)
{
return NULL;
}
EnQueue(qu, root);
p = root;
while( !QueueIsEmpty(qu) )
{
p = DeQueue(qu);
if(p->left != NULL)
{
EnQueue(qu, p->left);
}
if(p->right != NULL )
{
EnQueue(qu, p->right);
}
head = SingleList_insertTail(head, p);
}
return head;
}
/* 求树高度 */
int Get_High_BST(bstNode* root)
{
stack *qu = CreateQueue();
int high = 0, level_len = 0, tmp =0;
bstNode* p = NULL;
if(NULL == root)
{
return 0;
}
EnQueue(qu, root);
level_len = 1;
while( !QueueIsEmpty(qu) )
{
while(level_len > 0)
{
p = DeQueue(qu);
if( NULL != p->left )
{
++tmp;
EnQueue(qu, p->left );
}
if( NULL != p->right )
{
++tmp;
EnQueue(qu, p->right );
}
--level_len;
}
level_len = tmp ;
tmp = 0;
++high;
}
printf("\nBST high is %d\n\n", high);
return high;
}
bstNode* Transfer_Mirror_Tree(bstNode* root)
{
bstNode* p = root, *lp = NULL, *rp = NULL;
int level_len = 0, tmp = 0, high = 0;
queue* qu = CreateQueue();
if(NULL == root)
{
return p;
}
EnQueue(qu, root);
level_len = 1;
while( !QueueIsEmpty(qu) )
{
while(level_len > 0)
{
p = DeQueue(qu);
if(NULL != p->left)
{
++tmp;
EnQueue(qu, p->left);
}
if(NULL != p->right)
{
EnQueue(qu, p->right);
++tmp;
}
--level_len;
if(p->left != NULL || p->right != NULL)
{
lp = p->left;
p->left = p->right;
p->right = lp;
}
}
level_len = tmp;
tmp = 0;
++high;
}
return root;