按照前序输入创建二叉树并以前序遍历二叉树,并输出每个结点的所在层数
约定输入空格字符代表指向NULL
- #include<iostream>
- using namespace std;
-
- typedef char binTreeType;
-
- struct BinNode {
- binTreeType data;//存放每个结点的数据
- BinNode* left, * right;//分别指向左孩子和右孩子
- };
-
- //前序创建二叉树
- void CreatBinTree(BinNode** T) {//用二级指针因为要改变指针的指向
- char c;
- cin >> noskipws >> c;//这里一定要注意,默认的cin会跳过空白字符的输入
- if (c == ' ')*T = NULL;
- else {
- *T = (BinNode*)new BinNode;//开辟新结点
- (*T)->data = c;//给新结点赋值
-
- //递归创建左孩子和右孩子
- CreatBinTree(&(*T)->left);//&的优先级低于->
- CreatBinTree(&(*T)->right);
- }
- }
-
- void visit(binTreeType data, int level) {
- cout << data << "在第" << level << "层" << endl;
- }
- //前序遍历二叉树
- void PreOrder(BinNode* T, int level) {
- if (T != NULL) {
- visit(T->data, level);
- PreOrder(T->left, level + 1);
- PreOrder(T->right, level + 1);
- }
- }
-
- int main() {
- BinNode* T;
- CreatBinTree(&T);
- PreOrder(T, 1);
- return 0;
- }