问题为构建一颗二叉树,并实现两大功能,(1)以二叉链表为二叉树的存储结构,设计算法按前序遍历次序输出二叉树中的叶子结点
(2)以二叉链表作为二叉树的存储结构,编写算法实现交换二叉树每个结点的左孩子和右孩子。
思路及注意事项: (1)因我们需要不断创造节点,因此我们可以根据输入的字符来判断是否分配空间。而不需初始化。 (2)先序遍历是先对该节点实行操作(输出节点的数据) (3)交换时,直接对lnode,rnode进行交换,而不是再次定义几个变量,这样是交换不了的。(虽然都是交换地址,但后者是交换新变量的地址😀)
(2)以二叉链表作为二叉树的存储结构,编写算法实现交换二叉树每个结点的左孩子和右孩子。
思路及注意事项: (1)因我们需要不断创造节点,因此我们可以根据输入的字符来判断是否分配空间。而不需初始化。 (2)先序遍历是先对该节点实行操作(输出节点的数据) (3)交换时,直接对lnode,rnode进行交换,而不是再次定义几个变量,这样是交换不了的。(虽然都是交换地址,但后者是交换新变量的地址😀)
代码
using namespace std;
typedef struct BiTnode {
char data;
struct BiTnode* lnode, * rnode;
}BiTnode,*BiTree;
void creat(BiTree &T)
{
char ch;
cin >> ch;
if (ch == '#')T = NULL;
else
{
T = new BiTnode;
T->data = ch;
creat(T->lnode);
creat(T->rnode);
}
}
void show(BiTree T)
{
if (T != NULL)
{
cout << T->data;
show(T->lnode);
show(T->rnode);
}
}
void change(BiTree& T)
{
if (T->lnode != NULL && T->rnode != NULL)
{
change(T->lnode);
change(T->rnode);
BiTree p1 = T->lnode;
T->lnode = T->rnode;
T->rnode = p1;
}
}
int main()
{
BiTree T;
creat(T);
show(T);
change(T);
show(T);
return 0;
}