首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

如何理解二叉树递归返回值

2013-04-02 
怎么理解二叉树递归返回值啊 题目为设计一算法,把树b的左、右子树进行交换。要求不破坏原二叉树。 //BTNode*

怎么理解二叉树递归返回值啊
 题目为设计一算法,把树b的左、右子树进行交换。要求不破坏原二叉树。
 

//BTNode* Swap1(BTNode* b)  //dgh 这段代码不理解
//{
//    BTNode* t1, *t2, *t;
//    if (b == NULL)
//        t = NULL;
//    else
//    {
//        t = (BTNode*)malloc(sizeof(BTNode));
//        t->data = b->data;
//        t1 = Swap1(b->lchild);
//        t2 = Swap1(b->rchild);
//        t->lchild = t2;
//        t->rchild = t1;
//    }
//    return t;   //返回的值是那个结点的值啊?
//}

如果现在有二叉树
        a
    b      c
e     d
在执行到t1 = Swap1(b->lchild);
这句时当b指向e结点点时,b->lchild为空,t1等于Swap1()的返回值,即指向d结点,记为t1=e;
同理t2=d;
到了后面这两句
t->lchild = t2;
t->rchild = t1;
这是t应该是指向了结点b,为什么呢?
想不明白啊?

[解决办法]
在执行到t1 = Swap1(b->lchild);
这句时当b指向e结点点时,b->lchild为空(),t1等于Swap1()的返回值,即指向d结点,记为t1=e;
同理t2=d;
到了后面这两句
t->lchild = t2;
t->rchild = t1;
这是t应该是指向了结点b,为什么呢?
想不明白啊?

楼主思路好混乱。

在执行到t1 = Swap1(b->lchild);
这句时当b为e结点点时,b->lchild为空(),t1得到NULL,同样t2得到NULL,b->lchild = NULL, b->rchild=NULL.
这时返回的是copy了e节点数据的 t节点(这个节点是新分配的)

热点排行