创建先序二叉树-创建层次遍历树

创建先序二叉树

#include<iostream>
using namespace std;
class BinTreeNode
{
public:
    char ch;
    BinTreeNode(int value){ch=value;}
    BinTreeNode *left,*right;
};
BinTreeNode* create_tree()
{
    char item;
    BinTreeNode *t,*t_l,*t_r;
    cin>>item;
    if(item!=‘#‘)
    {
        BinTreeNode *pTmpNode=new BinTreeNode(item);
        t=pTmpNode;
 t_l=create_tree();
 t->left=t_l;
 t_r=create_tree();
  t->right=(t_r);
 return t;
    }
    else
    {
 t=NULL;
 return t;
    }
}
void midsearch(BinTreeNode *root)
{
    if(root!=NULL)
 cout<<(root->ch);
    else
 return ;
    midsearch(root->left);
    midsearch(root->right);
}
void leftsearch(BinTreeNode *root)
{
    if(root==NULL)
 return ;
    leftsearch(root->left);
    cout<<(root->ch);
    leftsearch(root->right);
}
void rightsearch(BinTreeNode *root)
{
    if(root==NULL)
 return ;
    rightsearch(root->left);
    rightsearch(root->right);
    cout<<(root->ch);
}
int main()
{
    BinTreeNode *root=create_tree();
    midsearch(root);  //先序遍历
    cout<<endl;
    leftsearch(root); //中序遍历
    cout<<endl;
    rightsearch(root); //后序遍历
    cout<<endl;
    return 0;
}

创建层次遍历树

#include<iostream>
#include<queue>
using namespace std;
class BinTreeNode
{
public:
    char ch;
    BinTreeNode(char value){ch=value;}
    BinTreeNode *left,*right;
    char get_data();
    BinTreeNode* get_left();
    BinTreeNode* get_right();
};
char BinTreeNode::get_data()
{
    return ch;
}
BinTreeNode* BinTreeNode::get_left()
{
    return left;
}
BinTreeNode* BinTreeNode::get_right()
{
    return right;
}
BinTreeNode* level_create()
{
    char data,data1,data2;
    BinTreeNode* r;
    cin>>data;
    if(data==‘#‘)
 return r;
    r=new BinTreeNode(data);
    deque<BinTreeNode*> q;
    q.push_back(r);
    while(!q.empty())
    {
 BinTreeNode *p=q.front();
 q.pop_front();
 cin>>data1;
        if(data1!=‘#‘)
        {
     p->left=new BinTreeNode(data1);
     q.push_back(p->left);
 }
  cin>>data2;
 if(data2!=‘#‘)
 {
     p->right=new BinTreeNode(data2);
     q.push_back(p->right);
 }
    }
    return r;
}
void midsearch(BinTreeNode *root)
{
    if(root!=NULL)
 cout<<(root->ch);
    else
 return ;
    midsearch(root->left);
    midsearch(root->right);
}
void leftsearch(BinTreeNode *root)
{
    if(root==NULL)
 return ;
    leftsearch(root->left);
    cout<<(root->ch);
    leftsearch(root->right);
}
void rightsearch(BinTreeNode *root)
{
    if(root==NULL)
 return ;
    rightsearch(root->left);
    rightsearch(root->right);
    cout<<(root->ch);
}
void level_order(BinTreeNode *r)
{
    if(r==NULL)
 return ;
    deque<BinTreeNode*> q;
    q.push_back(r);
    while(!q.empty())
    {
 BinTreeNode *p=q.front();
 cout<<p->get_data()<<" ";
 q.pop_front();
 if(p->get_left()!=NULL)
 {
     q.push_back(p->get_left());
 }
 if(p->get_right()!=NULL) 
 {
     q.push_back(p->get_right());
 }
    }
}
int main()
{
    BinTreeNode *root=level_create();
    midsearch(root); //先序遍历
    cout<<endl;
    leftsearch(root); //中序遍历
    cout<<endl;
    rightsearch(root); //后序遍历
    cout<<endl;
    level_order(root); //层次遍历
    cout<<endl;
    return 0;
}

以上两个程序都是根据已有的遍历结果来创建对应的树

时间: 2024-10-17 12:35:00

创建先序二叉树-创建层次遍历树的相关文章

二叉树的层次遍历(队列) and 二叉搜索树的后序遍历序列

(一)从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印.[层次遍历] 从上到下打印二叉树的规律:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾.接下来到队列的头部取出最早进入队列的节点,重复前面的操作,直至队列中所有的节点都被打印出来为止. //二叉树的层次遍历#include<iostream>#include<queue>using namespace std; typedef int ElemType;typedef st

树——二叉树的层次遍历

1,二叉树的遍历: 1,二叉树的遍历(Traversing Binary Tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次: 1,层次就是访问的次序,层次遍历是先访问第一层.再第二层等: 2,考虑的问题: 1,通用树结构的层次遍历算法是否可以用在二叉树结构上?如果可以,代码需要做怎样的改动? 1,可以的,二叉树是一种特别的树: 2,通用树使用的算法可以移植到二叉树使用的场合: 3,设计思路(游标): 1,提供一组遍历相关的函数,按层次访问

数据结构——链队列实现二叉树的层次遍历

在二叉树的遍历这篇博客中https://www.cnblogs.com/wkfvawl/p/9901462.html 对于二叉树的层次遍历我只是给出了基于C++ STL的代码,这里我使用数据结构的链表,构建一个链队列来实现.这也算是我第一次使用链队列来完成某个任务,链队列代码还是来自课本,因为之前使用C++ STL时,queue中的某些函数是有返回值的列如Q.front(),而有些却没有返回值像Q.push(p),Q.pop(),就连有没有参数也是不同的,在这里我没有改动课本上的代码来适应自己的

重建二叉树与二叉树的层次遍历

数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入数据有多组,第一行是一个整数t (t<1000).代表有t组測试数据.每组包含两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列. 输出 每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列 演示样例输

PTA 二叉树的层次遍历

6-6 二叉树的层次遍历 (6 分) 本题要求实现给定的二叉树的层次遍历. 函数接口定义: void Levelorder(BiTree T); T是二叉树树根指针,Levelorder函数输出给定二叉树的层次遍历序列,格式为一个空格跟着一个字符. 其中BinTree结构定义如下: typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; }BiTNode, *B

二叉树的层次遍历 II

二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / 9 20 / 15 7 按照从下往上的层次遍历为: [ [15,7], [9,20], [3] ] 标签 二叉树 队列 二叉树遍历 宽度优先搜索 1 /** 2 * Definition of TreeNode: 3 * class TreeNode { 4 * public: 5 * int

lintcode 中等题:binary tree level order traversal ii 二叉树的层次遍历II

题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / 9 20 / 15 7 按照从下往上的层次遍历为: [ [15,7], [9,20], [3] ] 解题 和上一题的答案反过来 直接每次在list中第一个位置加入当前层结点 /** * Definition of TreeNode: * public class TreeNode { *

二叉树的层次遍历和其深度

//二叉树的层次遍历和其深度#include <cstdio>#include <cstdlib>//define _OJ_#define maxsize 100typedef struct tree1{    char data;    struct tree1 *lchild;    struct tree1 *rchild;} tree1, *tree; typedef struct queue1{    tree data;    struct queue1 *next;}

二叉树的层次遍历和(叶子)节点

#include<stdio.h> #include<string.h> #include<stdlib.h> #define size 100 #define resize 10 typedef struct Bitnode{ //定义结点 char data; struct Bitnode *lchild,*rchild; }Bitnode,*Bitree; typedef struct { //定义队列 Bitree *base; int front; int r