PTA - 建立与遍历二叉树
建立与遍历二叉树
题目:以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉链式存储结构的二叉树,然后中序遍历该二叉树并输出结点数据。
输入格式:
字符串形式的先序序列(即结点的数据类型为单个字符)
输出格式:
中序遍历结果
输入样例:
ABC##DE#G##F###
输出样例:
CBEGDFA
#include <iostream>using namespace std;struct BinaryTree_Node
{char value; // 节点的值 BinaryTree_Node* lChild; // 左子节点 BinaryTree_Node* rChild; // 右子节点 // 节点的构造函数 BinaryTree_Node(): lChild(NULL), rChild(NULL){}
};typedef BinaryTree_Node* BT_Node; // 创建二叉树 (先序遍历)
BT_Node Create_BinaryTree()
{BT_Node root = new BinaryTree_Node();char v;cin >> v;if (v != '#'){root->value = v;root->lChild = Create_BinaryTree();root->rChild = Create_BinaryTree();}elseroot = NULL; return root;
}// 中序遍历
void In_traverse(BT_Node root)
{if (root == NULL)return;In_traverse(root->lChild);cout << root->value;In_traverse(root->rChild);
}int main()
{BT_Node root;root = Create_BinaryTree();In_traverse(root);
}
小结:——二叉树知识点
2.定义结点:
2.1 二叉链表:链式存储
2.2 定义结点 代码
struct BinaryTree_Node
{char date; // 节点的值 BinaryTree_Node* lChild; // 左子节点 BinaryTree_Node* rChild; // 右子节点 // 节点的构造函数 BinaryTree_Node(): lChild(NULL), rChild(NULL){}
};
3.遍历(先序遍历、中序遍历、后序遍历和层次遍历)
type BinaryTree_Node* BT_Node;//先序遍历 ———— 左子树-根节点-右子树 简称:根左右
void Pre_Traverse(BT_Node root)
{if (root == NULL) // 递归出口return;cout << root->value;Pre_Traverse(root->lChild);Pre_Traverse(root->rChild);
}// 中序遍历 ———— 左根右
void In_Traverse(BT_Node root)
{if (root == NULL) // 递归出口return;In_traverse(root->lChild);cout << root->value;In_traverse(root->rChild); } // 后序遍历 ———— 左右根
void Post_Traverse(BT_Node root)
{if (root == NULL) // 递归出口return;Post_Traverse(root->lChild);Post_Traverse(root->rChild);cout << root->value;
}// 层次遍历 --- 队列解法
void Level_Traverse(BT_Node root)
{queue<BT_Node> q;q.push(root);while(!q.empty()){BT_Node op = q.front();q.pop();cout << op->value;if (op->lChild != NULL)q.push(op->lChild);if (op->rChild != NULL)q.push(op->rChild);}
}
求二叉树节点的个数
// 求二叉树节点的个数
int GetNodeNum(BT_Node root)
{if (root == NULL) // 递归出口 return 0;// 二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 根节点 return GetNodeNum(root->lChild) + GetNodeNum(root->rChild) + 1;
}
PTA - 建立与遍历二叉树相关推荐
- PTA - 按层次遍历二叉树
按层次遍历二叉树 题目:以字符串的形式定义一棵二叉树的先序序列,若字符是'#', 表示该二叉树是空树,否则该字符是相应结点的数据元素.读入相应先序序列,建立二叉树,然后按层次遍历该二叉树并输出结点数据 ...
- 建立、遍历二叉树(二叉链表)
建立二叉树: 由于先序.中序.后序遍历的任何一个遍历结果单独都不能唯一确定一颗二叉树,因此不能直接使用其中任何一个遍历结果来构造二叉树(原因是不能确定左右子树的大小(节点数),或者说不知道子树的结束位 ...
- sdut 2136 数据结构实验之二叉树的建立与遍历
Problem Description 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树 ...
- 二叉树的建立与遍历(先中后层序)
在做一些算法题时,我会经常用到VS2017去测试,每次去找一个合适的二叉树觉得很麻烦,今天就自己写了一个放在博客上,下次就直接复制了 包含二叉树的建立,以及二叉树的前序遍历.中序遍历.后序遍历和层序遍 ...
- 二叉树的建立和遍历算法 - 数据结构和算法47
二叉树的建立和遍历算法 让编程改变世界 Change the world by program 有童鞋会说,我们上节课研究这么多遍历的方法干啥呢?聪明的鱼油们怎么看?! 对于二叉树,思路方面我们已 ...
- 小朋友学数据结构(3):二叉树的建立和遍历
小朋友学数据结构(3):二叉树的建立和遍历 一.基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树. 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的 ...
- C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...
二叉树的建立与遍历实验报告(c语言编写,附源代码).doc 第 1 页,共 9 页二叉树的建立与遍历实验报告级 班 年 月 日 姓名 学号_ 1实验题目建立一棵二叉树,并对其进行遍历(先序.中序.后序 ...
- 数据结构实验之二叉树的建立与遍历
题目描述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度. 输入 ...
- 二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会
前记 上周我投递出了简历,岗位是后端开发工程师.这周腾讯面试官给我进行了视频面试.面试过程中他问了二叉树的问题. 二叉树相关算法题,在面试中出现的次数非常非常多,所以我面试之前也有所准备.今天结合面试 ...
最新文章
- rss阅读器保存html文件,轻量级RSS阅读器网页版:selfoss安装教程
- 五个计算机软件,近五个交易日计算机软件概念股市复盘(4月19日)
- 一款不错的基于WEB技术的文件服务器
- 思科路由器动态NAT配置
- 【目录】《剑指Offer》Java实现
- Linux网络配置:设置IP地址、网关DNS、主机名
- linux判断是否能上网_如何判断飘窗是否能砸掉?砸掉飘窗可以怎么利用?
- 迷你sql profile,给缺少sql跟踪的朋友们
- java画图中运用缓冲解决屏幕闪烁方案二
- 15. Provide access to raw resources in resouce-managing classes
- JavaScript快速入门-基础
- 圆周率π前百万位,完整版显示
- 解决Nvivo自动编码问题,nvivo自动编码语言包
- Altium_Protel99SE圆线路板添加工艺边
- 轮播图图片大小不统一
- EOS Dapps已成黑客攻击事件
- AMSR-E微波辐射计详细介绍
- 留良乡投资理财要合理配置资产
- 安卓 NDK人脸识别 身份识别
- flash按钮脚本祥解
热门文章
- 2021-2027全球与中国光刻掩膜版市场现状及未来发展趋势
- Hello, Geant4
- js截取字符串,去掉前几位
- html5页面文件打包,Webpack入门(四)——HTML打包
- python输入个人所得税计算_2020年你会算个人所得税吗?没关系,python脚本帮助你!...
- 《Data Mining》第2章翻译 数据预处理
- 印章仿制工具_ps仿制印章工具怎么使用
- keil5工具的相关配置
- On the Uncertain Single-View Depths in Endoscopies
- 画论40 王穉登《吴郡丹青志》