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

Posted 多情剑客无情剑;

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(精)(递归遍历的延伸)交换二叉树的左右子树相关的知识,希望对你有一定的参考价值。

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

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

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

 

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

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

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了这个二叉树,指向了同一棵二叉树

 

以上是关于(精)(递归遍历的延伸)交换二叉树的左右子树的主要内容,如果未能解决你的问题,请参考以下文章

求代码:实现二叉树中所有结点左右子树的交换

二叉树的镜像(反转二叉树)

二叉树的前序遍历后序遍历中序遍历规则(递归)

二叉树的前中后和层序遍历详细图解(递归和非递归写法)

二叉树的后序遍历(非递归方法)

二叉树重建[UVA-536]