//将二叉树中所有节点的左右子树相互交换
- BiNode* Exchange(BiNode* T)
- {
- BiNode* p;
- if(NULL==T || (NULL==T->lchild && NULL==T->rchild))
- return T;
- p = T->lchild;
- T->lchild = T->rchild;
- T->rchild = p;
- if(T->lchild)
- {
- T->lchild = Exchange(T->lchild);
- }
- if(T->rchild)
- {
- T->rchild = Exchange(T->rchild);
- }
- return T;
- }
//将二叉树中所有节点的左右子树相互交换
//不使用递归
//不使用递归
- void NonRecursive_Exchange(BiNode* T)
- {
- Stack s;
- BiNode* p;
- if(NULL==T)
- return;
- InitStack(&s);
- Push(&s,T);
- while(!isEmpty(&s))
- {
- T = Pop(&s);
- p = T->lchild;
- T->lchild = T->rchild;
- T->rchild = p;
- if(T->rchild)
- Push(&s,T->rchild);
- if(T->lchild)
- Push(&s,T->lchild);
- }
- DestroyStack(&s);
- }
本文介绍了一种用于二叉树的所有节点左右子树相互交换的算法实现,包括递归方法和非递归方法。递归方法通过简单的交换过程实现节点子树的反转,而非递归方法则借助栈来迭代完成同样的任务。
1975

被折叠的 条评论
为什么被折叠?



