二叉树入门

原创 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里面的。核心点是用队列辅助实现层次遍历,也就是广度优先遍历,判断何时分层,当队列中的最后一个节点和队...
  • on_mytg_way
  • on_mytg_way
  • 2017年01月07日 15:45
  • 340

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

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

二叉树的遍历及创建(java)

直接上代码package com.example.zhanghaohao089.mytest;/** * Node类 * * @author ZHANGHAOHAO089 * @date 20...
  • android_Text
  • android_Text
  • 2017年05月31日 17:42
  • 194

重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现

读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点...
  • u011240877
  • u011240877
  • 2016年11月17日 02:03
  • 6943

android实现二级思维导图、二叉树、二级表图

  • 2017年09月20日 10:44
  • 18.67MB
  • 下载

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

二叉树层次遍历 输入一颗二叉树的先序遍历和中序遍历,输出它的后序遍历序列...
  • user_longling
  • user_longling
  • 2014年04月27日 19:07
  • 1361

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

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

二叉树的遍历及创建(java)

直接上代码package com.example.zhanghaohao089.mytest;/** * Node类 * * @author ZHANGHAOHAO089 * @date 20...
  • android_Text
  • android_Text
  • 2017年05月31日 17:42
  • 194

二叉树基础知识总结

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

二叉树的最大深度和最小深度

二叉树的定义:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(...
  • xiongqiaochu
  • xiongqiaochu
  • 2017年04月21日 11:33
  • 1366
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树入门
举报原因:
原因补充:

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