生成并遍历二叉树?
C++代码如下:
#include<iostream>
#include<string>
using namespace std;
struct TreeNode { // 二叉树结构
char val;
TreeNode *left, *right;
TreeNode(char ch) : val(ch), left(nullptr), right(nullptr) {}
};
// 由扩展前序序列生成二叉树
TreeNode* construct(string& s, int& i) { // 注意传入的i为引用
if (i == s.length())
return nullptr;
TreeNode *root = nullptr;
if (s[i] != '*') {
root = new TreeNode(s[i]);
++i;
root->left = construct(s, i);
++i;
root->right = construct(s, i);
}
return root;
}
void preOrder(TreeNode* root) { // 前序遍历
if (root) {
cout << root->val;
preOrder(root->left);
preOrder(root->right);
}
}
void inOrder(TreeNode* root) { // 中序遍历
if (root) {
inOrder(root->left);
cout << root->val;
inOrder(root->right);
}
}
void postOrder(TreeNode* root) { // 后序遍历
if (root) {
postOrder(root->left);
postOrder(root->right);
cout << root->val;
}
}
int main() {
string s = "ABC**DE*G**F***";
cout << "扩展前序序列为:" << s << endl;
int i = 0;
TreeNode* root = construct(s, i); // 生成该二叉树
cout << "其前序遍历序列为:";
preOrder(root);
cout << endl;
cout << "其中序遍历序列为:";
inOrder(root);
cout << endl;
cout << "其后序遍历序列为:";
postOrder(root);
cout << endl;
return 0;
}
编译通过,输出如下:
符合示例结果,望采纳~
生成并遍历二叉树?
TreeNode* root = construct(s, i); \/\/ 生成该二叉树 cout << "其前序遍历序列为:";preOrder(root);cout << endl;cout << "其中序遍历序列为:";inOrder(root);cout << endl;cout << "其后序遍历序列为:";postOrder(root);cout << endl;return 0;} 编译通过,输出如下:符合示例...
画二叉树软件-请问如何用随机函数生成二叉树,并遍历?
首先要搞明白二叉树的几种遍历方法:(1)、先序遍历法:根左右;(2)、中序遍历法:左根右;(3)、后序遍历法:左右根。其中根:表示根节点;左:表示左子树;右:表示右子树。 至于谈到如何画先序遍历的流程图,可以这样考虑:按照递归的算法进行遍历一棵二叉树。 程序首先访问根节点,如果根节点的值为空(NULL),则停止...
二叉树遍历演示
以下是一棵二叉树及其经过三种遍历所得到的相应遍历序列二叉树的两种遍历方法:(1)对一棵二叉树中序遍历时,若我们将二叉树严格地按左子树的所有结点位于根结点的左侧,右子树的所有结点位于根右侧的形式绘制,就可以对每个结点做一条垂线,映射到下面的水平线上,由此得到的顺序就是该二叉树的中序遍...
建立二叉树的二叉链表表示,实现二叉树的先序、中序、后序和按层次遍历...
printf("%c",T->data);\/\/访问结点 Inorder(T->rchild);\/\/中序遍历右字树 } } void Postorder(BTree T)\/\/后序遍历 { if(T){ Postorder(T->lchild);Postorder(T->rchild);printf("%c",T->data);} } int TreeDepth(BTree T)\/\/后序遍历求二叉树的深度,结点数和叶子数 { int hl,...
一只一棵二叉树的先序遍历结果为abcdefghi,中序遍历结果为cbafegdhi...
根 左 右、左 根 右、左 右 根。分别称为先序遍历、中序遍历、后续遍历,子树也一样,到一个子树就遍历一次,按照遍历顺序写下去就好,尤其注意根特殊对待(只有一个所以只写一个)。后续遍历是:CBEFDA 依据前序遍历序列可确定根结点为A;再依据中序遍历序列可知其左子树由DBE构成,右子树为FC;...
一棵树的后序遍历与这棵树所对应的二叉树的中序遍历相同吗?
1、先根遍历:先访问树的根节点,再依次先根遍历子树;2、后根遍历:先依次后根遍历子树,再访问树的根节点。因为树并不一定是二叉树,‘中’的概念不好定义,比如对于一个拥有3个子树的根节点来说,根节点除了先根和后根两种遍历方式之外还有另外两种次序。如一种次序是先遍历根节点的第一棵子树...
已知一棵二叉树的中序遍历序列和后序遍历序列。如何画出这棵二叉树...
首先,根据给定的中序遍历序列和后序遍历序列,我们可以推断出这棵二叉树的结构。中序遍历序列是AEHCFBIGD,后序遍历序列是HEFCIGDBA。在后序遍历序列中,最后一个节点A是根节点,它的左子树包含在后序遍历序列的第一个元素H和最后一个元素D之间,右子树包含在后序遍历序列的第二个元素F和倒数第二...
创建一个由10个节点组成的二叉树结构,并按前根、中根、后根对该二叉树...
}}void preorder(struct Bitree *root){ if(root!=NULL) { printf("%c",root->c); preorder(root->l); preorder(root->r); }}void inorder(struct Bitree *root){ if(root!=NULL) { inorder(root->l); printf("%c"...
用递归算法先序中序后序遍历二叉树
1、先序 void PreOrderTraversal(BinTree BT){ if( BT ){ printf(“%d\\n”, BT->Data); \/\/对节点做些访问比如打印 PreOrderTraversal(BT->Left); \/\/访问左儿子 PreOrderTraversal(BT->Right); \/\/访问右儿子 } } 2、中序 void InOrderTraversal(BinTree BT){ if(BT){ InOrde...
二叉树画图工具在线生成-如何用word画一幅二叉树图啊?
可以快速生成对应的哈夫曼数格式如示例即可,并可以快速计算出带权总值 如何用word画一幅二叉树图啊?绘图工具。用三个“圆”作为结点,并将它们连接起来。二叉树的画法可以分为:1、确定根节点。2、确定该节点的左儿子与右儿子。3、递归下去,直到所有节点都不再有儿子节点。中序遍历:先遍历左子树,然后...
连贪乐舒: 我写了一个二叉树 你给看看 一定能行的 我自己用了 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #define Max 20 //结点的最大个数 typedef struct BinTNode{char data;struct BinTNode *lchild,*rchild; }...
贞丰县19131846792: 如何构造和遍历二叉树 - ?
连贪乐舒: 生成左子树 CreateBiTree(&((*bt)->%c" } } void inOrder(BiTree root) { if(root; }BiTNode, *BiTree; preOrder(root ->RChild); /*中序序遍历右子树*/ } } void postOrder(BiTree root) { if(root!=NULL) { postOrder(root-> printf("%c";生成右子树 } } 接下...
贞丰县19131846792: 用c语言编程实现二叉树的建立和遍历二叉树? - ?
连贪乐舒: //这是我上数据结构写的 建议理解为主#include#include#define ERROR 0#define OK 1#define OVERFLOW -2#define FLASE 0#define TURE 1 typedef int Status; typedef char TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode ...
贞丰县19131846792: 怎么建立二叉树,然后先序遍历? - ?
连贪乐舒: #include <stdio.h>#include <iostream>#include <queue>#include <stack>#include <malloc.h>#define SIZE 100 using namespace std; typedef struct BiTNode //定义二叉树节点结构 { char data; //数据域 struct BiTNode *lchild,*rchild; //左右孩子指...
贞丰县19131846792: 二叉树的建立和遍历 - ?
连贪乐舒: #include<iostream> using namespace std; typedef struct tree { char data; struct tree *lchild,*rchild; }bitree; void creattree(bitree *&T) {char data; cin>>data; if(data=='#') T=NULL; else{ T=new(bitree); T->data=data; creattree(T->lchild); creattree(T->...
贞丰县19131846792: 二叉树的建立及遍历 - ?
连贪乐舒: #include<stdio.h>#include<stdlib.h> typedef struct BiT{ char data; struct BiT *lchild; struct BiT *rchild; }BiT; BiT* CreateBiTree(BiT *T) { //构造二叉链表表示的二叉树T char ch; scanf("%c",&ch); if (ch=='#') T = NULL; else { T = (BiT *)malloc(sizeof(...
贞丰县19131846792: 二叉树的建立,二叉树的遍历. - ?
连贪乐舒: #include "stdio.h"//二叉树的练习 typedef struct BiTNode { char data; /*结点的数据域*/ struct BiTNode *lchild , *rchild; /*指向左孩子和右孩子*/ } BiTNode , *BiTree;/*创建一棵二叉树*/ CreatBiTree(BiTree *T) { char c; c = getch(); printf("get = ...
贞丰县19131846792: 二叉树遍历(c语言实现) - ?
连贪乐舒: #include <stdio.h>#include <malloc.h> typedef struct node{ int data; struct node *lchild,*rchild; }*treetp,tree; treetp create (treetp t,int c); void print1(treetp); void print2(treetp); void print3(treetp); int number=0; void main() { treetp t=0,r;r=create (t,0);...
贞丰县19131846792: 二叉树的建立与遍历(C++) - ?
连贪乐舒: //先定义数据类型 #typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//data你想用什么类型自己变就行了//建树也用递归 void createTree(char data,BiTree &T)//用引用 {char c; 输入c; if(c!=NULL){T=(BiTree)malloc(...
贞丰县19131846792: 二叉树的建立和遍历@@@@高分解决后追加悬赏?
连贪乐舒: /* 测试数据: ABC$$D$$EFG$$$H$$ */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef char DataType; struct node { DataType data; struct node *left; struct node *right; }; /* 清理二叉树 */ void ClearT(struct node ...