二叉树的先序构造以及递归版本的先序遍历

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef struct t {
 char n;//数据
 t* left;//左儿子的指针
 t* right;//右儿子的指针
}TREE, * tree;
tree createtree(tree& root)//二叉树的建立
{
 char temp;
 cin >> temp;//用临时变量
 if (temp == '#') {//判断一下字符是不是#,是意味着到此为止
  root = NULL;//当然,一开始就输入#的话根节点直接是NULL
 }
 else {//不是。说明该节点有一个对应的儿子
  root = (tree)malloc(sizeof(TREE));
  root->n = temp;//给儿子赋值
  createtree(root->left);//看看儿子的左边
  createtree(root->right);//看看儿子的右边
 }
 return root;
}
void preordertraverse(tree& root)//二叉树的先序便利(递归版)
{
 if (root) {//不能为空
  printf("%c ", root->n);//先打印本节点
  preordertraverse(root->left);//再去访问左节点
  preordertraverse(root->right);//再去访问右节点
 }
 return;
}
int main() {
 tree root;
 root = createtree(root);//建立树,建立完毕自动执行完毕,返回根节点的指针
 if (root) {//建立成功了
  preordertraverse(root);
 }
 else {
  cout << "树是空的" << endl;
 }
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值