如何理解二叉树递归返回值
怎么理解二叉树递归返回值啊 题目为设计一算法,把树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节点(这个节点是新分配的)