精华内容
下载资源
问答
  • 主要介绍了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作,涉及Python基于先序遍历和中序遍历构造二叉树,再后序遍历输出相关操作技巧,需要的朋友可以参考下
  • 关于二叉树输入

    2019-09-18 18:23:17
    1.通过先序的方式创建二叉树(递归实现,每次都先去给他的左节点赋值,如果是#,就对右节点进行赋值)先序方式根左右,中序是左根右,后序是左右根(中序后序都需要先找到最左节点) 做深信服的题遇到了层次输入的...

    1.通过先序的方式创建二叉树(递归实现,每次都先去给他的左节点赋值,如果是#,就对右节点进行赋值)先序方式根左右,中序是左根右,后序是左右根(中序后序都需要先找到最左节点)
    在这里插入图片描述
    做深信服的题遇到了层次输入的方式
    算法:队列实现
    根节点入队
    出队时,创建左节点和右节点(赋值),如果值不为#就入队。
    直到队列为空。

    展开全文
  • C++层次遍历输入二叉树(用STL) 在设置队列的时候,注意类型是queue<Node *> Tqueue,如果不写星号,push时会创建一个新的节点入队,这样整棵树就不是连通的;而加了星号,是把指针地址入队,所以在操作的...

    C++层次遍历输入二叉树(用STL)

    在设置队列的时候,注意类型是queue<Node *> Tqueue,如果不写星号,push时会创建一个新的节点入队,这样整棵树就不是连通的;而加了星号,是把指针地址入队,所以在操作的时候是在原节点上操作,这样经过左孩子和右孩子赋值,才可以把整棵树连通。输出print函数是一个简单的中序遍历。

    #include<iostream>
    #include<cstdio>
    #include<queue>
    using namespace std;
    
    struct Node{
        Node *left;
        Node *right;
        int c;
    }Tree[110];
    
    int loc;
    
    Node* creat(int a){
        Tree[loc].left = Tree[loc].right = NULL;
        Tree[loc].c = a;
        return &Tree[loc++];
    }
    
    void print(Node* T){
        if(T -> left != NULL){
            print(T -> left);
        }
        cout<<T -> c<<" ";
        if(T -> right != NULL){
            print(T -> right);
        }
    }
    
    int main(){
        queue<Node *> Tqueue;
        int n, left, right;
        Node *T = creat(1);
        Tqueue.push(T);
        while(cin>>n){
            while(n--){     //层次遍历输入二叉树,n代表父节点的个数
                cin>>left>>right;
                Node *l = creat(left), *r = creat(right);
                Tqueue.push(l);
                Tqueue.push(r);
                Node* temp = Tqueue.front();
                Tqueue.pop();
                temp->left = l;
                temp->right = r;
            }
            print(T);
        }
        return 0;
    }
    
    展开全文
  • struct treenode//二叉树节点 { int data; treenode * L; treenode * R; }; void create(treenode* &root,int n)//n为节点数目,root必须加引用,否则函数内的一切操作白搭 { int a,i=0;//a用作输入节点...

    输入预览:
    请添加图片描述
    请添加图片描述
    输出效果:
    请添加图片描述
    请添加图片描述
    参考代码:

    #include<iostream>
    #include<queue>
    using namespace std;
    
    struct treenode//二叉树节点
    {
    	int data;
    	treenode * L;
    	treenode * R;
    };
    
    void create(treenode* &root,int n)//n为节点数目,root必须加引用,否则函数内的一切操作白搭
    {
    	int a,i=0;//a用作输入节点数据,i记录已经加入树中的节点个数(可以不用i,但有时候需要补很多0)
    	queue<treenode*>q;//用于按层输入数据,库函数,随便搜一搜就知道queue怎么用了
    	cin >> a;//输入根节点值
    	if (a == 0)//空树
    	{
    		root = NULL;
    		return;
    	}
    	
    	else
    	{
    		root = new treenode;//申请根节点
    		root->data = a;
    		root->L = NULL;
    		root->R = NULL;
    		q.push(root);//入队
    		i++;
    		if (i == n)
    			return;
    	}
    	while (!q.empty())
    	{
    		treenode* temp = q.front();//一轮循环为root,以后的循环为temp->R或temp->L;
    		q.pop();//出队
    		cin >> a;
    		if (a == 0)
    		{
    			temp->L = NULL;
    		}
    		else
    		{
    			temp->L = new treenode;//一轮循环为将root指针的左孩子指向一个新节点,向新节点赋值刚输入的数据,并将新节点的左右孩子置NULL
    			temp->L->data = a;
    			temp->L->L = NULL;
    			temp->L->R = NULL;
    			q.push(temp->L);
    			i++;
    			if (i == n)
    				return;
    		}
    		
    		cin >> a;
    		if (a == 0)
    		{
    			temp->R = NULL;
    		}
    		else
    		{
    			temp->R = new treenode;
    			temp->R->data = a;
    			temp->R->L = NULL;
    			temp->R->R = NULL;
    			q.push(temp->R);
    			i++;
    			if (i == n)
    				return;
    		}
    	}
    	return;
    }
    
    void preOrderTraverse(treenode*p)//先序遍历
    {
    	if (p == NULL)
    		return;
    	printf_s("%d ", p->data);
    	preOrderTraverse(p->L);
    	preOrderTraverse(p->R);
    }
    
    void inOrderTraverse(treenode *t)//	中序遍历
    {	 
    	if (t)
    	{
    		inOrderTraverse(t->L);
    		printf("%d ", t->data);
    		inOrderTraverse(t->R);
    	}
    }
    
    void postOrderTraverse(treenode *t)//	后序遍历 
    {	
    	if (t)
    	{
    		postOrderTraverse(t->L);
    		postOrderTraverse(t->R);
    		printf("%d ", t->data);
    	}
    }
    
    void layerOrderTraverse(treenode *root)//层序遍历
    {
    	queue<treenode*>q;
    	q.push(root);
    	while (!q.empty())
    	{
    		treenode * now = q.front();
    		q.pop();
    		printf("%d ", now->data);
    		if (now->L != NULL)q.push(now->L);
    		if (now->R != NULL)q.push(now->R);
    	}
    }
    
    int main()
    {
    	treenode*ro=NULL;
    	printf_s("请输入节点数:\n");
    	int n; scanf_s("%d", &n);
    	printf_s("请按层输入数据:\n");//(左孩子或右孩子缺失补0,每个地方都要补成二叉,最后一个节点例外)
    	create(ro,n);
    	printf_s("\n先序遍历:"); preOrderTraverse(ro);
    	printf_s("\n中序遍历:"); inOrderTraverse(ro);
    	printf_s("\n后序遍历:"); postOrderTraverse(ro);
    	printf_s("\n层序遍历:"); layerOrderTraverse(ro);
    }
    

    hello world!一起遇见新的世界!

    展开全文
  • 二叉树的简单输入输出

    千次阅读 多人点赞 2020-04-13 11:17:54
    二叉树二叉树存储的方式先序创建(难点)遍历先序遍历中序遍历后序遍历验证 话不多说,码来 二叉树存储的方式 typedef struct Node { char data;//存储数据 struct Node *LChild;//左儿子 struct Node *RChild;//...


    话不多说,码来

    二叉树存储的方式

    typedef struct Node
    {
    	char data;//存储数据
    	struct Node *LChild;//左儿子
    	struct Node *RChild;//右儿子
    }BNode,*BTree;
    

    在这里插入图片描述
    以下的存储和遍历我们依照该图来说明

    先序创建(难点)

    这里的创建主要需要理解指针的传递,理解了就可以自己敲出来了

    void CreatBTree(BTree * bt)//创建二叉树 
    {
    	char ch;
    	ch=getchar();
    	if(ch=='.')
    	{
    		*bt=NULL;
    	}
    	else 
    	{
    		*bt=(BTree )malloc(sizeof(BNode));
    		(*bt)->data=ch;
    		CreatBTree(&((*bt)->LChild));
    		CreatBTree(&((*bt)->RChild));	
    	}
    
    }
    //依次输入: AB.D..CE.F...来先序创建二叉树
    

    遍历

    二叉树的遍历 其实先序,中序,后序遍历都是差不多的,理解了先序遍历,后序和中序也就理解了

    先序遍历

    void PreOrder(BTree root)//先序遍历 
    {
    	if(root)
    	{
    	//先序遍历先输出根节点,再输出左子树,再输出右子树
    		printf("%c ",root->data);
    		PreOrder(root->LChild);
    		PreOrder(root->RChild);
    	}
    }
    
    

    //输出:A B D C E F

    中序遍历

    void InOrder(BTree root)//中序遍历 
    {
    	if(root)
    	{
    	//中序序遍历先输出输出左子树,再输出根节点,最后再输出右子树
    		InOrder(root->LChild);
    		printf("%c ",root->data);
    		InOrder(root->RChild);
    	}
    } 
    //输出:B D A E F C
    

    后序遍历

    void PostOrder(BTree root)//后序序遍历 
    {
    	if(root)
    	{
    	//中序序遍历先输出输出右子树,再输出根节点,最后再输出左子树
    		PostOrder(root->LChild);
    		PostOrder(root->RChild);
    		printf("%c ",root->data);
    	} 
    } 
    //输出:D B F E C A
    

    验证

    int main()
    {
    	BTree bt;
    	CreatBTree(&bt);
    	
    	PreOrder(bt);
    	printf("\n");
    	InOrder(bt);
    	printf("\n");
    	PostOrder(bt);
    	printf("\n");
    	return 0;
    } 
    

    以下四行数据分别是先序输入创建二叉树,先序输出,中序输出,后续输出:
    在这里插入图片描述

    由于水平有限,本博客难免有不足,恳请各位不吝赐教!

    展开全文
  • 是把T置为空结束输入,但是问题是只输入一个是不能结束的,是因为二叉树不是线性的他有leftchild和rightchild,把左孩子有孩子以及他们的子节点置空才可以。 最后是代码 #include<stdio.h> #include
  • 输入共3行:第一行为满二叉树中结点个数n(n<1024);第二行为n个整数,表示二叉树的先序遍历序列;第三行也有n个整数,表示二叉树的中序遍历序列。整数间以空格分割。
  • 二叉树输入输出操作

    千次阅读 2017-08-29 20:33:57
    一、二叉树的抽象数据类型:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
  • 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。 输入 输入文件为tree.in,共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。 输出 输出...
  • 二叉树可执行代码,用了就知道 。 二叉树的遍历、线索及应用( 用递归或非递归的方法都可以) [问题描述] 建立二叉树,并输出二叉树的先序,中序和后序遍历序列...[实现提示] 可通过输入带空格的前序序列建立二叉链表。
  • 文章目录一、二叉树的表示1、二叉树的顺序表示2、二叉树的链表表示二、编写递归程序的要点三、利用二叉树遍历实现多种操作1.输出二叉树所有结点2.建立二叉树3.求二叉树的高度4.交换所有结点的左右子树5.统计叶子结点...
  • 按顺序输入建立二叉树

    千次阅读 2019-09-25 09:47:09
    二叉树的顺序存储是指用一组地址连续的存储单元依次自上而下、自左向右存储完全二叉树上的结点元素 1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct btree 4 { 5 int data; 6 ...
  • 程序功能:输入二叉树先序序列,输出先序,中序,后序序列 作者:令狐荣豪 完成日期:2019/5/19 =====================================================*/ #include<stdio.h> #include<st...
  • 由于之前王老师讲了怎么通过递归的方式利用 遍历序列的输入顺序构建 二叉树 一、思想基于递归遍历 例如 先序遍历 1 2 4 0 0 5 6 0 0 7 0 0 3 0 0 -1 (0表示当前结点为空,-1表示输入结束) 二、构建二叉树 1.先判断...
  • 【题目】C++输入二叉树的层序遍历序列,输出其前序遍历序列 代码: #include<iostream> #include<vector> #include<string> using namespace std; struct TreeNode { string val;//节点的...
  • python从控制台接收输入创建二叉树

    千次阅读 2017-12-03 22:40:27
    python先序创建二叉树,从控制台接收输入,每次只接受一个节点,输入‘#’表示空节点。递归创建。 代码: class node(): def __init__(self, k=None, l=None, r=None): self.key = k self.left = l self....
  • 前序中序和中序后序 递归构建二叉树(检测输入序列的合法性)和二叉树的动态打印 前序中序和中序后序 递归构建二叉树(检测输入序列的合法性)和二叉树的动态打印 前序中序和中序后序 递归构建二叉树(检测输入序列...
  • 用户输入相应的节点数据对二叉树的节点进行定义, 以‘#’代表空节点,以‘*’代表二叉树构建完成 图片中第一行为输入数据,第二行为中序遍历的结果,第三行为层次遍历的结果。 以下为样例代码: #include<...
  • 二叉树建立的输入问题

    万次阅读 2018-09-24 15:32:10
    这几天在看数据结构的二叉树,被二叉树建立时的输入问题困扰很久。二叉树的建立一般使用递归算法,将所有节点的数据一股脑的输入,递归无法停止,二叉树就无法建立。 感谢此博文,原来我们在输入节点数据的时候,...
  • 根据括号表达式构造二叉树,对二叉树进行前序,中序,后序,层序遍历,并用树形方式打印输出,有详细注释,供C++数据结构课程学习与交流使用。
  • 主要介绍了python使用递归的方式建立二叉树,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • **二叉树的定义:**二叉树由n个节点所构成的集合,该集合或者为空集,或者由一个根节点和两颗互不相交的,分别为根节点的左子树和右子树的二叉树组成。 二叉树的基本性质: 性质1:在二叉树的第i层上至多有2^(i-1)...
  • 输入C,先序创建二叉树,#表示空节点; 输入H:计算二叉树的高度; 输入L:计算二叉树的叶子个数; 输入N:计算二叉树节点总个数; 输入1:先序遍历二叉树输入2:中序遍历二叉树输入3:后续遍历二叉树输入F...
  • C++ 二叉树的基本操作

    千次阅读 多人点赞 2017-12-22 11:04:49
    用C++实现二叉树的基本操作,建立和遍历; 二:介绍 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现...
  • Description Little Valentine liked playing with binary trees very much. Her favorite game was constructing randomly looking binary trees with capital letters in the nodes.... This is an example of one...
  • 二叉树

    千次阅读 2017-06-21 19:35:42
    二叉树(Binary Tree):每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 二叉树性质: (1) 在二叉树的第i层上至多有个结点。 (2) 深度为k...
  • 二叉树的建立

    2014-06-06 18:16:10
    二叉树的建立,利用左右孩子指针,查找节点并求指定节点路径
  • 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 import java.lang.*; //一个很正常的想法是:首先判断左子树是不是平衡二叉树,然后判断右...
  • 1.广义表创建二叉树 比如:A(B(,G),C(D(F),E)) 2.二叉树输出广义表

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 130,015
精华内容 52,006
关键字:

怎样输入二叉树