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);
    }

    层序遍历:

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

  • 相关阅读:
    免费馅饼(HDU 1176 DP)
    搬寝室(HDU 1421 DP)
    FatMouse's Speed(HDU LIS)
    Bone Collector II(HDU 2639 DP)
    Palindrome(POJ 1159 DP)
    Proud Merchants(POJ 3466 01背包+排序)
    树的最大独立集
    Roads in the North(POJ 2631 DFS)
    Starship Troopers(HDU 1011 树形DP)
    Strategic game(POJ 1463 树形DP)
  • 原文地址:https://www.cnblogs.com/liujianing/p/9348268.html
Copyright © 2011-2022 走看看