首页 > 试题广场 >

设计在链式存储结构上交换二叉树中所有结点左右子树的算法 。

[问答题]

设计在链式存储结构上交换二叉树中所有结点左右子树的算法

void Swap(BiTreeNode* &T1, BiTreeNode* &T2)//交换两个二叉树结点指针的指向 { BiTreeNode* t=T1; T1=T2; T2=t; } void NodeSwap(BiTreeNode* &T)//交换二叉树每个结点的左孩子和右孩子 { //此算法根据二叉树先序遍历算法改造而来 if(T!=NULL) { if(T->LChild!=NULL&&T->RChild!=NULL)//如果T的左孩子和右孩子都不空 { //将"交换二叉树每个结点的左孩子和右孩子"转换为"交换二叉树每个结点的左孩子的数据域和右孩子的指针域". Swap(T->LChild,T->RChild); } else if(T->LChild!=NULL&&T->RChild==NULL)//如果T的左孩子不空且右孩子为空 { //将T的左子树变为右子树 T->RChild=T->LChild; T->LChild=NULL; } else if(T->LChild==NULL&&T->RChild!=NULL)//如果T的左孩子为空且右孩子不为空 { //将T的右子树变为左子树 T->LChild=T->RChild; T->RChild=NULL; } else//如果T的左孩子和右孩子都为空 { //空操作 ; } NodeSwap(T->LChild); NodeSwap(T->RChild); } else { ; } }
发表于 2020-12-22 23:02:56 回复(0)

typedef struct node {int data; struct node *lchild,*rchild;} bitree;

void swapbitree(bitree *bt)

{

bitree *p;

if(bt==0) return;

swapbitree(bt->lchild); swapbitree(bt->rchild);

p=bt->lchild; bt->lchild=bt->rchild; bt->rchild=p;

}
发表于 2017-05-16 23:23:01 回复(0)