PTA 7-6 交换二叉树中每个结点的左孩子和右孩子 (20 分)
PTA 7-6 交换二叉树中每个结点的左孩子和右孩子 (20 分)
以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。
#include
#include
using namespace std;
template<typename T>
struct TreeNode
{T data;TreeNode<T> *lchild;TreeNode<T> *rchild;TreeNode(){data=0;lchild=NULL;rchild=NULL;}TreeNode(T n){data=n;lchild=NULL;rchild=NULL;}
};
template<typename T>
void InOrder(TreeNode<T> *subtree,void(*visit)(TreeNode<T> *p))
{if(subtree!=NULL){InOrder(subtree->lchild,visit);visit(subtree);InOrder(subtree->rchild,visit);}
}
template<typename T>
TreeNode<T> * Reverse(TreeNode<T> *subtree)
{if(subtree==NULL){return NULL;}else{Reverse(subtree->lchild);Reverse(subtree->rchild);}TreeNode<T> *t=subtree->lchild;subtree->lchild=subtree->rchild;subtree->rchild=t;return subtree;
}
template<typename T>
void visit(TreeNode<T> *p)
{cout<<p->data;
}
template<typename T>
void Create(TreeNode<T> *&subtree)//没有返回值的函数若要保留节点信息,应该加上“&”符号!
{char ch;scanf("%c",&ch);if(ch!='\n'){if(ch=='#'){subtree=NULL;}else{subtree=new TreeNode<T>(ch);Create(subtree->lchild);Create(subtree->rchild);}}
}
int main()
{TreeNode<char> *p=new TreeNode<char>;Create(p);InOrder(p,visit);cout<<endl;Reverse(p);InOrder(p,visit);cout<<endl;return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
