构建如下图所示二叉树:
主要疑问:
在创建二叉树的函数中为什么要用到指针的引用呢?(这一点很重要)
- 因为我想改变从主函数中传入的二叉树的根指针。
- 孩子节点最终会变成根节点,所以也需要改变指针,故需要指针引用的方式。
具体请参考代码中的注释。
//
// Created by 彭程明 on 2019/6/26.
//
#include <iostream>
using namespace std;
typedef struct binaryNode{
char data;
binaryNode *lchild,*rchild;
} binaryNode, *binaryTree;
void createBinaryTree(binaryTree &T)
{
//先序遍历生成二叉树
char data;
cin>>data;
if (data == '#')
{
T = NULL;
}
else
{
T = new binaryNode();
//此时main函数中的tree变成了T,从此以后T的地址就没有被改变过了,也就是tree没有被改变了,改变的是T的孩子的值,而不是T,也就是tree指针始终是根节点的指针。
//另外,每次孩子节点的指针都会变成根节点的指针,所有也需要通过指针引用的方式。
cout<<T<<endl;
T->data = data;
createBinaryTree(T->lchild);
createBinaryTree(T->rchild);
}
}
void visit (binaryTree T)
{
if(T->data != '#')
{
cout<<T->data;
}
}
//先序遍历
void preOrder (binaryTree T)
{
if (T != NULL)
{
cout<<T->data<<endl;
preOrder(T->lchild);
preOrder(T->rchild);
}
}
int main()
{
binaryTree tree;
cout<<tree<<endl;
createBinaryTree(tree);
// cout<<tree<<endl;
// cout<<beifei<<endl;
// cout<<tree<<endl;
cout<<"最后一个节点地址"<<tree<<endl;
preOrder(tree);
return 0;
}
运行结果如下:
调用createBinaryTree()后tree的地址变成了二叉树中的根节点的地址。