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

    struct Node
    {
    int data;
    Node* left;
    Node* right;
    };

    Node* createNode(int data)
    {
    Node* tempNode = NULL;
    tempNode = (Node*)malloc(sizeof(Node));
    tempNode->left = NULL;
    tempNode->right = NULL;
    tempNode->data = data;

    return tempNode;
    }

    void insertNode(Node* p, int data)
    {
    Node* tempNode = createNode(data);

    //左子树<=data,右子树>data

    while (1)
    {
    if (tempNode->data > p->data)
    {
    if (p->right == NULL)
    {
    p->right = tempNode;
    break;
    }
    else
    {
    p = p->right;
    }
    }
    if (tempNode->data <= p->data)
    {
    if (p->left == NULL)
    {
    p->left = tempNode;
    break;
    }
    else
    {
    p = p->left;
    }
    }
    }
    }

    先序遍历:

    若树为空,则空操作返回。否则,先访问根节点,然后前序遍历左子树,再前序遍历右子树。

    void preOrder(Node* p)
    {
    if (p == NULL)
    {
    return;
    }
    printf("%d", p->data);
    preOrder(p->left);
    preOrder(p->right);
    }

    中序遍历:

    若树为空,则空操作返回。中序遍历根节点的左子树,然后是访问根节点,最后中序遍历根节点的右子树。

    void inOrder(Node* p)
    {
    if (p == NULL)
    {
    return;
    }
    preOrder(p->left);
    printf("%d", p->data);
    preOrder(p->right);
    }

    后序遍历:

    若树为空,则空操作返回。否则,从左到右先叶子后节点的方式遍历访问左右子树,最后访问根节点。

    void postOrder(Node* p)
    {
    if (p == NULL)
    {
    return;
    }
    preOrder(p->left);
    preOrder(p->right);
    printf("%d", p->data);
    }

    层序遍历:

    利用队列,根节点入队,子节点入队,最后依次出队即可

  • 相关阅读:
    项目经验分享(上)
    socket.io实现在线群聊
    socket.io中文文档
    常用的Sublime Text插件及安装方法
    常用的Atom插件
    atom及其插件activate-power-mode下载安装
    jeesite快速开发平台
    js权威指南
    hexSHA1散列加密解密(不可逆)
    腾讯云企业邮箱
  • 原文地址:https://www.cnblogs.com/liujianing/p/9348268.html
Copyright © 2011-2022 走看看