二叉树入门

原创 2016年05月31日 23:28:34

二叉链表

        对二叉树的存储,即可采用顺序存储结构(数组),也可采用链式存储结构(链表)。

        在链式存储结构中,每一个节点都含有一个数据域,两个指针域——分别用来指向该节点的左、右子树。利用这种节点构成的链式存储结构称为二叉链表。

创建

        为简单起见,给定一数据集,以该数据集中的元素创建一完全二叉树。这里不考虑非完全二叉树的情况。代码如下:

struct BinaryTreeNode* NewNode(int pos,char* s){
    long len = strlen(s);
    struct BinaryTreeNode* root = (struct BinaryTreeNode*)malloc(sizeof(struct BinaryTreeNode));
    root->data=s[pos];
    root->left = NULL;
    root->right = NULL;
    if(2*pos + 1< len){
        struct BinaryTreeNode* left = NewNode(2*pos+1, s);
        root->left = left;
        if(2*pos + 2< len){//有左子树才有可能有右子树
            struct BinaryTreeNode* right= NewNode(2*pos+2, s);
            root->right = right;
        }
    }
    return root;
}

        先为当前的数据创建一节点,再判断当前的数据是否有左、右子树,如果有则将创建的左、右子树的根节点设置为当前节点的左、右指针。涉及到的结构体如下:

typedef char NODE_TYPE;
struct BinaryTreeNode{
    NODE_TYPE data;//数据域
    struct BinaryTreeNode* left,*right;//左、右子树域
};

        其实上述的创建过程就是把数据转换为节点。

遍历

        对二叉树的遍历有三种形式:先序(先遍历根节点,再左、右子树),中序(左-中-右),后序(左-右-中)。以先序为例,方法有两种:递归与使用栈代替递归。分别如下:

递归法:

void PrintBinaryTree(struct BinaryTreeNode* root){
    if(root == NULL){
        return;
    }
    PrintBinaryTree(root->left);
    PrintBinaryTree(root->right);
    printf("%c ",root->data);
}
        其具体思路为:先输出左节点,再输出右节点,最后输出根节点。因为采用的是递归,所以实现起来非常简单。



相关文章推荐

android复习路之二叉树层次遍历并且分层

二叉树的层次遍历,利用队列辅助实习,并且使用last和nlast 实现二叉树的分层,队列用的是stl里面的。核心点是用队列辅助实现层次遍历,也就是广度优先遍历,判断何时分层,当队列中的最后一个节点和队...

【数据结构】之二叉树的java实现

二叉树的定义: 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。...

二叉树的遍历

二叉树的遍历的重要性毋庸置疑,是很多算法的基础。遍历二叉树可以分为深度优先遍历和广度优先遍历,其中,深度优先遍历又可以分为先序、中序、后序。 提供一个二叉树,可能写出其几种遍历方式的序列并不难,但要...

二叉树学习——简单入门题

二叉树层次遍历 输入一颗二叉树的先序遍历和中序遍历,输出它的后序遍历序列...

二叉树基础知识总结

题外话 昨晚面了腾讯,问了一个完全二叉树的题,竟然让我算了快10分钟,因为等比公式记错了导致最后用最原始的方法推算结果也没算对,一下子就懵了。本来精心准备了1周的面试,最后因为自己基础知识记忆不牢固导...

二叉树基础及应用

二叉树基础: 刚看到堆排序,顺便记录一下关于树的一些基本概念: 前言 前面介绍的栈、队列都是线性结构(linear structure)。而树是非线性结构(non-linear structu...

树和二叉树的一些基础知识

树: 1.树是递归的一种体现,树中有子树 2.树中的子树之间互不相交 3.一棵树由根节点(root),分支节点和叶节点(leaf)组成 或者说是由一个根节点和若干子树构成 4.树的度(degree)是...

二叉树所有相关代码入门

  • 2013年11月12日 20:58
  • 6KB
  • 下载

JAVA数据结构---二叉树入门

本程序分为四个文件: 节点类:Node.java 二叉树类:BinaryTree.java 访问类:Visit.java 主类测试:MainTest.java(1)Node.javapubli...

《算法竞赛入门经典》第六章6.3树和二叉树总结

UVa679这道题刚开始我的想法就是和书上那个超时的代码,一样的,通过一个树状数组去模拟那个过程和书上分析的那样,测试数据太过庞大,虽然没有数组移动这样耗时的程序,但for(int i=0;i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树入门
举报原因:
原因补充:

(最多只允许输入30个字)