二叉树的建立(前序遍历法)

参考《大话数据结构》P187~188——二叉树的建立。

举个简单的例子:

代码和解释如下(VS2012测试通过):

 1 #include <iostream>
 2 using namespace std;
 3
 4 //二叉树的二叉链表结点结构定义
 5 typedef struct BiTNode
 6 {
 7     char  data;
 8     struct BiTNode *lchild,*rchild;
 9 }BiTNode;
10
11 //输入前序遍历,创建二叉树
12 //这里输入AB#D##C##
13 void CreateBiTree(BiTNode **T)//*T是指向BiTNode的指针
14 {
15     *T=new BiTNode;
16     if(*T==NULL)//如果*T还是指向NULL,表示内存分配失败,退出程序
17         exit(OVERFLOW);
18     char ch;
19     cin>>ch;
20     if(ch==‘#‘)
21         *T=NULL;
22     else
23     {
24         (*T)->data=ch;//*T指向的节点的data分配内容,即生成根节点
25         CreateBiTree(&((*T)->lchild));//创建&(*T)->lchild临时变量,传入CreateBiTree,构造左子树
26         CreateBiTree(&((*T)->rchild));//创建&(*T)->rchild临时变量,传入CreateBiTree,构造右子树
27         // 相当于
28         // BiTNode **p1;
29         // p1=&((*T)->lchild);//不能直接p1=&lchild
30         // CreateBiTree(p1);
31         // BiTNode **p2;
32         // p2=&((*T)->rchild);//不能直接p2=&rchild
33         // CreateBiTree(p2);
34     }
35 }
36
37 //二叉树的前序遍历
38 void PreOrderTraverse(BiTNode *B)
39 {
40     if(B==NULL) return;//如果指向空结点,直接返回
41     cout<<B->data<<" ";//输出该结点的data
42     PreOrderTraverse(B->lchild);//前序遍历左子树
43     PreOrderTraverse(B->rchild);//前序遍历右子树
44     return;
45 }
46
47 int main()
48 {
49     BiTNode **pp;//定义指向BiTNode的二级指针pp
50     BiTNode *p;//定义指向BiTNode的指针p
51     pp=&p;//pp指向p
52     p=NULL;//初始化p指向NULL
53
54     CreateBiTree(pp);//传入指向p的地址,创建二叉树
55
56     PreOrderTraverse(p);//传入指向BiTNode的地址,前序遍历创建好的二叉树,验证二叉树的创建是否正确
57     cout<<endl;
58 }

运行结果:

时间: 2024-07-30 22:30:52

二叉树的建立(前序遍历法)的相关文章

C语言二叉树的建立与遍历

二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式差不多.也分好几种方式建立,这里 就写一种,就是先序建立 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct TreeNode{ 5 char ch; 6 struct TreeNode *lchild, *rch

小朋友学数据结构(3):二叉树的建立和遍历

小朋友学数据结构(3):二叉树的建立和遍历 一.基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树. 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的共同祖先.比如上图中的"7"结点就是根结点. 子结点:除了根结点外的结点,都叫子结点. 叶子结点:没有子结点的结点,叫做叶子结点.比如上图中的"1"结点."5"结点和"11"结点. 二叉树的遍历,有三种: (1)前序遍历:先遍历根

数据结构 二叉树的建立、遍历、销毁的递归算法(C语言)

这些是较为简单的二叉树的建立.遍历.销毁的递归算法.假设二叉树都用二叉链作为存储结构,并约定根节点的指针用T表示. 为了简化问题,我们用char类型的字符代替树中的数据,并且用前序遍历的算法,建立二叉树过程如下: 输入一个根节点. 若输入的是“ ”(即空格字符),则表明改结点为空,T设置为NULL: 若输入的不是“ ”(空格字符),则将字符存入到T->data中,并依次递归建立它的左子树T->lchild,和右子树T->rchild; 测试的源代码如下: 1 #include<st

【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】

[144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [1,2,3]. Note: Recursive solution

二叉树的建立与遍历(山东理工OJ)

数据结构实验之二叉树的建立与遍历 题目描述 已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点).请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度. 输入 输入一个长度小于50个字符的字符串. 输出 输出共有4行: 第1行输出中序遍历序列: 第2行输出后序遍历序列: 第3行输出叶子节点个数: 第4行输出二叉树深度. 示例输入 abc,,de,g,,f,,, 示例输出 cbegdfa cgefdba 3 5 #include <iost

关于二叉树,建立、遍历、求节点最大距离

今天做了一题求二叉树节点的最大距离,顺便写了下二叉树的建立,遍历的过程. 我觉得这题的主要思想是深度遍历+动态规划,我们在深度遍历的过程中,对于某一个子树,求出左右子树叶子节点到根节点的最大距离,进而求出经过根节点的最大距离. 最后求出所有子树经过根节点的最大距离.就是这个题目的最终结果.代码如下: //二叉树的建立,以及遍历 //16 14 8 2 -1 -1 4 -1 -1 7 1 -1 -1 -1 10 9 -1 -1 3 -1 -1 //16 14 8 2 -1 -1 4 -1 -1 7

二叉树的建立与遍历(二)(c++实现)

[目标] 建立如下所示的一棵二叉树,并且输出其对应的前序遍历.中序遍历.后序遍历. [代码实现] // Binarytree.h #ifndef Binarytree_H #define Binarytree_H template<class T> class Binarytree; template<class T> class TreeNode { friend class Binarytree<T>; private: T data; TreeNode<T&

二叉树的建立与遍历

#include<stdio.h> #include<math.h> #include<stdlib.h> #include<malloc.h> typedef struct Node { int data; struct Node *LChild; struct Node *RChild; } BitNode,*BitTree; //前序建立二叉树,遇到-1停止 BitTree PreCreate(BitTree T) { int n; //printf(

二叉树的建立与遍历(c++实现)

[目标] 建立如下所示的一棵二叉树,并且输出其对应的前序遍历.中序遍历.后序遍历. [代码实现] 建立二叉树以及实现遍历的操作存放在Binarytree.h文件中 //Binarytree.h #ifndef Binarytree_H #define Binarytree_H template<class T> class Binarytree; template<class T> class TreeNode { friend class Binarytree<T>;

二叉树的建立和遍历

二叉树是十分重要的数据结构,主要用来存放数据,并且方便查找等操作,在很多地方有广泛的应用. 今天主要写的最基本的二叉树,后续会继续写线索二叉树,二叉排序树,平衡二叉树等. 二叉树的建立思路仍然是采用的递归的思想,给定一个指向根节点的指针,然后递归调用ceate()函数,自动生成一个二叉树.就像是在地上挖了个坑(根节点),然后他会拿着斧子(create函数)自己挖一颗很大的洞穴(二叉树)出来.当然挖坑前需要先定义每个洞长什么样(定义节点结构). 1 #include<iostream> 2 us