二叉树链式存储结构

  • 二叉链表的C语言描述


  • 基本运算的算法——建立二叉链表、先序遍历二叉树、中序遍历二叉树、后序遍历二叉树、后序遍历求二叉树深度

?





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

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

#include<iostream>

#include<cstdio>

using
namespace std;

class
Tree

{

private:

    struct
Node

    {

        char
data;

        Node * lchild;

        Node * rchild;

        Node()

        {

            lchild = NULL;

            rchild = NULL;

        }

        Node(char
a)

        {

            data = a;

            lchild = NULL;

            rchild = NULL;

        }

    };

    void
creatTree(Node* &head)

    {

        char
a;

        cin>>a;

        if(a == ‘#‘)

        {

            head->lchild = head->rchild = NULL;

            head = NULL;

        }

        else

        {

            head->data = a;

            head->lchild = new
Node();

            head->rchild = new
Node();

            creatTree(head->lchild);

            creatTree(head->rchild);

        }

    }

    void
NLR(Node *head)

    {

        if(head)

        {

            cout<<head->data;

            NLR(head->lchild);

            NLR(head->rchild);

        }

        else
cout<<"#";

    }

    void
LNR(Node *head)

    {

        if(head)

        {

            LNR(head->lchild);

            cout<<head->data;

            LNR(head->rchild);

        }

        else
cout<<"#";

    }

    void
LRN(Node * head)

    {

        if(head)

        {

            LRN(head->lchild);

            LRN(head->rchild);

            cout<<head->data;

        }

        else
cout<<"#";

    }

public:

    Node * head;

    Node * cur;

    Tree() {}

    Tree(char
a)

    {

        Node * tem = new
Node(a);

        head = tem;

        cur = tem;

    }

    void
creatTree()

    {

        head = new
Node();

        creatTree(head);

    }

    void
NLR()

    {

        if(head)

            NLR(head);

        else
cout<<"#";

    }

    void
LNR()

    {

        if(head)

            LNR(head);

        else
cout<<"#";

    }

    void
LRN()

    {

        if(head)

        {

            LRN(head);

        }

        else
cout<<"#";

    }

    int
BiTreeDeep(Node * head)

    {

        num++;

        int
dept = 0;

        if(head)

        {

            int
lchilddept = BiTreeDeep(head->lchild);

            int
rchilddept = BiTreeDeep(head->rchild);

            dept = lchilddept >= rchilddept ? (lchilddept + 1) : (rchilddept + 1);

        }

        return
dept;

    }

};

int
main()

{

    Tree dusk;

    dusk.creatTree();

    int
cnt = 0;

    dusk.NLR();

    cout<<endl;

    dusk.LNR();

    cout<<endl;

    dusk.LRN();

    cout<<endl;

    cout<<dusk.BiTreeDeep(dusk.head);

}

  

二叉树链式存储结构,布布扣,bubuko.com

时间: 2024-08-02 11:02:37

二叉树链式存储结构的相关文章

二叉树的链式存储结构----二叉链表

头文件:head.h #include<string.h> #include<ctype.h> #include<malloc.h> /* malloc()等 */ #include<limits.h> /* INT_MAX等 */ #include<stdio.h> /* EOF(=^Z或F6),NULL */ #include<stdlib.h> /* atoi() */ #include<io.h> /* eof()

二叉树的链式存储结构--二叉链表

1 二叉树的链式存储结构 //二叉链表的结点结构定义 typedef struct BiTNode { int data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode; typedef struct BiTNode *BiTree; 结构示意图如下: 2 二叉树的遍历方法 (1)前序遍历:先访问根结,然后前序遍历左子树,再前序遍历右子树. (2)

完全二叉树的链式存储结构的转化 &amp; 非递归中序遍历二叉树

1 /* 2 * 二叉树 3 * 4 * (将完全二叉树的数组形式改为链表形式) 5 * 6 * 1 7 * 2 3 8 * 4 5 6 7 9 * 8 10 * 11 */ 12 #include <iostream> 13 #define MAX 10 14 using namespace std; 15 16 typedef struct btnode{ 17 int data; 18 struct btnode * lchild; 19 struct btnode * rchild;

二叉树链式存储和遍历

1 二叉树的链式存储 1.1 链式存储 顺序存储对空间利用率较低,所以,二叉树一般采用链式存储结构,用一个链表来存储一颗二叉树.二叉链表至少包含3个域:数据域data,左指针域lchild和右指针域rchild,如果再加上一个指向双亲结点的指针就变成了三叉链表. 二叉树的链式存储结构如下: /** * 二叉链表结点 * @author cyhe */ private class Node{ Integer data; Node lchild, rchild; } 根据完全二叉树的序列递归创建二叉

线性表的链式存储结构

1 n个结点链结成一个链表,即为线性表的链式存储结构,由于每一个结点只包含一个指针域,因此称为单链表. 链表中第一个结点的存储位置成为头指针,那么整个链表的存取就必须是从头指针开始了. 有时候会在单链表的第一个结点前附设一个结点,称为头结点. 头指针与头结点的区别: 头指针: (1)头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针. (2)头指针具有标识作用,所以常用头指针冠以链表的名字. (3)无论链表是否为空,头指针都不为空.头指针是链表的必要元素. 头结点: (1)

栈的链式存储结构和入栈出栈操作

参考<大话数据结构>P98~99——栈的链式存储结构. 进栈: 出栈: 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 typedef string status;//用书上推荐的status返回是否成功,C++中的模板类string比字符数组char[]更方便 6 7 //栈的结点 8 //包含data,和指向下一个结点

线性表—链式存储结构

链式存储结构就是一环扣一环的线性结构,好像链条中的每一个人都只知道下一个人的地址,只有从前往后顺序查找才能找到第 j 个人. 链式结构的好处是在插入和删除时不需要移动插入位置后面的元素,但要找到要插入和删除的元素的位置还是得像顺序存储结构一样查找,但这个查找还有所不同,顺序存储结构支持我们使用二分查找之类的方法进行查找插入以及删除的位置,至于链式结构感觉似乎没法使用二分法类似的方法(充分利用有序这一条件进行查找) 链式存储结构适合于插入删除操作比较多的场合,比如飞机航班的乘客信息,至于学校的学生

03.线性表(二)链式存储结构.单链表1

链式存储结构.单链表1 1.基本概念 为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置) (1)数据域:存储线性表数据元素数据信息的域称为数据域: (2)指针域:把存储直接后继位置(下一个数据元素的地址)的域称为指针域,指针域中存储的信息为指针或链: (3)结点(Node):由数据域和指针域两部分信息组成数据元素ai的存储映像,称为结点. (4)头指针:把链表中第一个结点的存储

04.线性表(三)链式存储结构.单链表2

链式存储结构.单链表2 顺序存储结构的创建实质是一个数组的初始化,存储空间连续且其大小和类型已经固定:单链表存储空间不连续,是一种动态结构且它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的情况和实际的需求即时生成. 一.单链表的整表创建 创建单链表的过程就是一个动态生成链表的过程,即从"空表"的初始化起,依次建立各元素结点,并逐个插入链表. 1.算法思路 (1)声明一个结点p和计数器变量i; (2)初始化一空链表L (3)让链表L的头结点的指针指向NULL,即建立一个带头