题解:

  1. 这里面myTree中的root成员是在main函数中声明,但在CreateTree中malloc,所以注意CreateTree函数要传引用。

题目:

问题 A: DS二叉树—二叉树构建与遍历(不含框架)
时间限制: 1 Sec  内存限制: 128 MB
提交: 498  解决: 384
[提交][状态][讨论版]
题目描述给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘#’表示,例如AB#C##D##),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果。

输入第一行输入一个整数t,表示有t个二叉树第二行起输入每个二叉树的先序遍历结果,空树用字符‘#’表示,连续输入t行。输出输出每个二叉树的先序遍历、中序遍历和后序遍历结果。样例输入
2
AB#C##D##
AB##C##
样例输出
ABCD
BCAD
CBDA
ABC
BAC
BCA

代码块:

#include <iostream>
using namespace std;typedef struct BiTNode
{char data;struct BiTNode *lchild, *rchild;
} BiTNode;typedef struct BiTree
{BiTNode *root;
} BiTree;void CreateTree(BiTNode *&p)
{char c;cin>>c;if(c!='#'){p = new BiTNode;p->data = c;CreateTree(p->lchild);CreateTree(p->rchild);}elsep = NULL;
}void PreOrderTraverse(BiTNode *p)
{if(p){cout<<p->data;PreOrderTraverse(p->lchild);PreOrderTraverse(p->rchild);}
}void InOrderTraverse(BiTNode *p)
{if(p){InOrderTraverse(p->lchild);cout<<p->data;InOrderTraverse(p->rchild);}
}void PostOrderTraverse(BiTNode *p)
{if(p){PostOrderTraverse(p->lchild);PostOrderTraverse(p->rchild);cout<<p->data;}
}int main(void)
{int t;cin>>t;while(t--){BiTree myTree;CreateTree(myTree.root);PreOrderTraverse(myTree.root);cout<<endl;InOrderTraverse(myTree.root);cout<<endl;PostOrderTraverse(myTree.root);cout<<endl;}return 0;
}

问题代码:

#include <iostream>
using namespace std;typedef struct BiTNode
{char data;struct BiTNode *lchild, *rchild;
} BiTNode;typedef struct BiTree
{BiTNode *root;
} BiTree;BiTNode * CreateTree(BiTNode *p)
{//不使用引用的递归方法。char c;cin>>c;if(c!='#'){p = new BiTNode;p->data = c;CreateTree(p->lchild);//修改:p->lchild = CreateTree(p->lchild);CreateTree(p->rchild);//修改:p->rchild = CreateTree(p->rchild);//这样修改后就是正确代码了,问题在于递归中return的p没有用上,内层递归结束后return的值要赋值给传入的值。}elsep = NULL;return p;
}void PreOrderTraverse(BiTNode *p)
{if(p){cout<<p->data;PreOrderTraverse(p->lchild);PreOrderTraverse(p->rchild);}
}void InOrderTraverse(BiTNode *p)
{if(p){InOrderTraverse(p->lchild);cout<<p->data;InOrderTraverse(p->rchild);}
}void PostOrderTraverse(BiTNode *p)
{if(p){PostOrderTraverse(p->lchild);PostOrderTraverse(p->rchild);cout<<p->data;}
}int main(void)
{int t;cin>>t;while(t--){BiTree myTree;myTree.root = CreateTree(myTree.root);PreOrderTraverse(myTree.root);cout<<endl;InOrderTraverse(myTree.root);cout<<endl;PostOrderTraverse(myTree.root);cout<<endl;}return 0;
}

DS二叉树—二叉树构建与遍历(不含框架)相关推荐

  1. Java实现二叉树的构建与遍历

    转载:http://ocaicai.iteye.com/blog/1047397 目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 2.具体代码 Java代码   packa ...

  2. Java二叉树的构建与遍历

    一.二叉排序树定义 1.二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性 ...

  3. 问题 A: DS二叉树—二叉树构建与遍历

    第一次写博客,不足之处请大家包涵指出!谢谢! 问题 A: DS二叉树-二叉树构建与遍历(不含框架) 题目描述 给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符'#'表示,例如AB#C##D ...

  4. 二叉树层序遍历递归与非递归_二叉树基础(1)-构建和遍历(递归和非递归)...

    二叉树的构建有2种方式:1.直接输入数字.2.根据两种顺序来判断另外一中顺序(后面会提到) 这里分享第一种构建方式,二叉树的前中后三种遍历方式(递归和非递归版本),和二叉树的层次遍历. 见代码demo ...

  5. 二叉树的构建及各种遍历回顾

    二叉树的构建及各种遍历回顾 直接上代码 1 #ifndef TREE_H2 #define TREE_H3 4 #include <iostream>5 #include <mall ...

  6. 线索二叉树中序非递归线索化以及递归线索化构建和遍历算法

    引文 大部分教材给出了 线索二叉树的中序递归线索化以及中序遍历,但是没给出非递归,现在网上大部分非递归算法代码各种条件判断写的比较离谱,所以干脆自己总结了一个清晰的.线索二叉树中序非递归线索化以及递归 ...

  7. 51. Leetcode 106. 从中序与后序遍历序列构造二叉树 (二叉树-二叉树构建)

    给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 .示例 1:输入:inor ...

  8. 50. Leetcode 105. 从前序与中序遍历序列构造二叉树 (二叉树-二叉树构建)

    给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点.示例 1:输入: preord ...

  9. 二叉树的创建和遍历-C语言实现

    二叉树的创建和遍历-C语言实现 链式存储结构 struct BinaryTreeNode {//数据char data;//左子树BinaryTreeNode *leftChild;//右子树Bina ...

最新文章

  1. Tesla AutoPilot纯视觉方案解析
  2. 从IoT World 2019看全球IoT九大发展趋势
  3. 服务器无限火力时间,LOL无限火力2018时间表6月具体开启时间 无限火力模式什么时候出...
  4. 电脑安装python3.7说缺少-安装python缺少
  5. lisp xy轴不等比缩放_UV的详细解释,不懂得赶紧看过来!
  6. c语言标准io中可读可写,C语言标准IO: [先读再feof] VS [先feof再读]
  7. Tomcat无法启动,报错java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
  8. Git 合并分支选项 --squash 合并提交历史
  9. 美国已批准马斯克的SpaceX发射1.2万颗卫星 以打造一个天基互联网
  10. sqlserver 2012 不允许保存更改 的解决办法 0108
  11. 【彩彩只能变身队】用户需求分析(一)—— 调查问卷
  12. 18 个惊人的 GitHub 仓库
  13. 利用Google翻译实现网站国际化——js插件
  14. 【Excel】按百分比随机抽取excel中数据
  15. ThinkPad默认墙纸(心经版)
  16. 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计
  17. ubuntu ffmpeg 录制系统音频
  18. java对接快递鸟单号查询自动识别api接口,调用代码示例
  19. Technical Artist的不归路 —— 创建游戏世界前团队交流之我见
  20. Java Vs. C♯

热门文章

  1. VScode 常用插件推荐
  2. 什么是群、什么是阿贝尔群(abel群、阿贝尔群也称为交换群或可交换群)、群论入门
  3. VSCode常用插件和字体设置
  4. 面试时,如何回答关于“缺点”的问题——大学生求职七大昏招衍生系列(2)
  5. ERP中的制造数据结构
  6. linux系统运维必会
  7. The Preliminary Contest for ICPC Asia Xuzhou 2019
  8. 数组的 find() 和 findIndex() 方法
  9. 图片底部留白怎么处理
  10. 电脑无法新建文件怎么办?