zoukankan      html  css  js  c++  java
  • 二叉树

    二叉树节点

    // 树节点
    struct binary_tree
    {
      int data; // 数据
      struct binary_tree *left; // 左叶子节点
      struct binary_tree *right; // 右叶子节点
    };
    
    typedef struct binary_tree node;
    

    插入节点

    void insert(node ** tree, int val)
    {
      node *temp = NULL;
    
      // 判断树节点是否为null,为null时生成节点插入到树中
      if (NULL == (*tree))
      {
        temp = (node*)malloc(sizeof(node));
        temp->left = NULL;
        temp->right = NULL;
        temp->data = val;
        (*tree) = temp;
        return;
      }
    
      // 已经存在的树节点,需要往左右子节点插入
      if (val < (*tree)->data)
      {
        // 小于当前节点插入左边
        insert(&(*tree)->left, val);
      }else if (val > (*tree)->data)
      {
        //  大于当前节点插入到右边
        insert(&(*tree)->right, val);
      }
    }
    

    删除节点

    void deltree(node *tree)
    {
      if (NULL != tree)
      {
        if (NULL != tree->left)
        {
          deltree(tree->left);
        }
    
        if (NULL != tree->right)
        {
          deltree(tree->right);
        }
    
        free(tree);
      }
    }
    

    二叉树遍历

    前序遍历

    // 前序遍历,先输出data,再输出左右节点
    void print_preorder(node *tree)
    {
      if (NULL != tree)
      {
        printf("%d 
    ", tree->data);
        print_preorder(tree->left);
        print_preorder(tree->right);
      }
    }
    

    中序遍历

    // 中序遍历,先输出左节点,再输出data,最后输出右节点
    void print_inorder(node *tree)
    {
      if (NULL != tree)
      {
        print_inorder(tree->left);
        printf("%d 
    ", tree->data);
        print_inorder(tree->right);
      }
    }
    

    后序遍历

    // 后序遍历,先输出左右节点,在输出data
    void print_postorder(node *tree)
    {
      if (NULL != tree)
      {
        print_postorder(tree->left);
        print_postorder(tree->right);
        printf("%d 
    ", tree->data);
      }
    }
    

    代码

    #include <stdio.h>
    #include <stdlib.h>
    
    struct binary_tree
    {
      int data;
      struct binary_tree *left;
      struct binary_tree *right;
    };
    
    typedef struct binary_tree node;
    
    void insert(node ** tree, int val)
    {
      node *temp = NULL;
    
      // 判断树节点是否为null,为null时生成节点插入到树中
      if (NULL == (*tree))
      {
        temp = (node*)malloc(sizeof(node));
        temp->left = NULL;
        temp->right = NULL;
        temp->data = val;
        (*tree) = temp;
        return;
      }
    
      // 已经存在的树节点,需要往左右子节点插入
      if (val < (*tree)->data)
      {
        // 小于当前节点插入左边
        insert(&(*tree)->left, val);
      }else if (val > (*tree)->data)
      {
        //  大于当前节点插入到右边
        insert(&(*tree)->right, val);
      }
    }
    
    void deltree(node *tree)
    {
      if (NULL != tree)
      {
        if (NULL != tree->left)
        {
          deltree(tree->left);
        }
    
        if (NULL != tree->right)
        {
          deltree(tree->right);
        }
    
        free(tree);
      }
    }
    
    // 前序遍历,先输出data,再输出左右节点
    void print_preorder(node *tree)
    {
      if (NULL != tree)
      {
        printf("%d 
    ", tree->data);
        print_preorder(tree->left);
        print_preorder(tree->right);
      }
    }
    
    // 中序遍历,先输出左节点,再输出data,最后输出右节点
    void print_inorder(node *tree)
    {
      if (NULL != tree)
      {
        print_inorder(tree->left);
        printf("%d 
    ", tree->data);
        print_inorder(tree->right);
      }
    }
    
    // 后序遍历,先输出左右节点,在输出data
    void print_postorder(node *tree)
    {
      if (NULL != tree)
      {
        print_postorder(tree->left);
        print_postorder(tree->right);
        printf("%d 
    ", tree->data);
      }
    }
    
    int main(void)
    {
      node *root = NULL;
    
      insert(&root, 9);
      insert(&root, 4);
      insert(&root, 15);
      insert(&root, 2);
      insert(&root, 6);
      insert(&root, 12);
      insert(&root, 17);
    
      print_preorder(root);
    
      getchar();
    
      deltree(root);
      return 0;
    }
    
    

    参考:https://www.cnblogs.com/landpack/p/4783120.html

  • 相关阅读:
    sass学习笔记1
    javascript 数组的深度复制
    div+css定位position详解
    滚动加载图片(懒加载)实现原理
    移动端布局经验
    js 扁平化输出数组
    axiso基本使用及python接收处理
    JSP内置对象
    JSP基本语法
    tomcat环境搭建
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/12894734.html
Copyright © 2011-2022 走看看