二叉树的学习与递归有着密不可分的关系,二叉树的大部分操作可以用递归来实现。
再创造二叉树的过程中可以先写出创建根,左子树,右子树的代码,然后把左子树和右子树分别当作一颗新的数,然后利用递归就可以实现。
【问题描述】
给出一个按照先序遍历得出的字符串,'#' 代表空的子节点,大写字母代表节点内容,建立一个二叉树。
【样例输入】
ABC##DE#G##F###
【代码实现】
#include<iostream>
using namespace std;
struct BinTree
{
char data;
struct BinTree *left ,*right ;
};
void creatBinTree(BinTree *&root)
{
char c;
cin>>c;
if(c != '#')
{
root = new BinTree;
root->data = c;
creatBinTree(root->left);
creatBinTree(root->right);
}
else
root = NULL;
}
【补充说明】
在传入形参的时候用*&而不是*
是因为如果用*,系统则会用拷贝构造创建一个新的指针,指向实参指针指向的地址,那么我们的在函数内改变指针的指向就不会影响到实参,因此我们运用*&,直接引用实参,来达到目的。