首页 > 代码库 > (精)(递归遍历的延伸)交换二叉树的左右子树

(精)(递归遍历的延伸)交换二叉树的左右子树

给这个函数传的是指针,如果传整个结构,参数堆栈的效率较低

悟:单链表,恋栈,链队,二叉树的链式存储,传递的参数都是指针

顺序栈--顺序表-循环队列-传递的都是整个结构进去

 

做题一定要经过自己动脑,不要去看答案而试图去记住答案,一定要自己代码一行一行的写,数学题一步一步的写,经过自己深入动脑,这样才能理解好问题

 完全自己研发出来,和二叉树的遍历基本相似

void exchange99(BTNode *T)
{   BTNode *b;   //临时作为交换的变量
    if(T==NULL || (T->lchild==NULL&&T->rchild==NULL) )
        return; //为空或者是叶子结点-就不用交换了
    b=T->lchild;
    T->lchild = T->rchild;
    T->rchild = b ;

    exchange99(T->lchild);
    exchange99(T->rchild);
}

技术分享

 

 

void exchange0(BTNode *T , BTNode *&b)
{
    if(T==NULL)
        return;
    b=T;
    exchange(T->lchild,b->rchild);
    exchange(T->rchild,b->lchild);
}

技术分享

 

void exchange(BTNode *T , BTNode *&b)
{
    if(T==NULL)
        return ;
    b=T;
    exchange(T->lchild,b->lchild);
    exchange(T->rchild,b->rchild);
}

直接b=T就copy了这个二叉树,指向了同一棵二叉树

 

(精)(递归遍历的延伸)交换二叉树的左右子树