zoukankan      html  css  js  c++  java
  • 二叉树的建立与遍历

    定义二叉树结构体:

    typedef struct BinaryTreeNode
    {
        TelemType data;
        struct BinaryTreeNode *Left;
        struct BinaryTreeNode *Right;
    }Node;
    

    创建二叉树:

    Node* createBinaryTree()
    {
        Node *p;
        TelemType ch;
        cin>>ch;
        if(ch == 0)     //如果到了叶子节点,接下来的左、右子树分别赋值为0
        {
            p = NULL;
        }
        else
        {
            p = (Node*)malloc(sizeof(Node));
            p->data = ch;
            p->Left  = createBinaryTree();  //递归创建左子树
            p->Right = createBinaryTree();  //递归创建右子树
        }
        return p;
    }
    
    PS:创建二叉树顺序为先中心节点,然后左子树,然后右子树,到了叶子节点后要把它的左右子树分别赋值为0。
    

    遍历二叉树

    先序遍历:

    void preOrderTraverse(Node* root)
    {
        if( root )
        {
            cout<<root->data<<' ';
            preOrderTraverse(root->Left);
            preOrderTraverse(root->Right);
        }
    }
    

    中序遍历:

    void inOrderTraverse(Node* root)
    {
        if( root )
        {
            inOrderTraverse(root->Left);
            cout<<root->data<<' ';
            inOrderTraverse(root->Right);
        }
    }
    

    后序遍历:

    void lastOrderTraverse(Node* root)
    {
        if( root )
        {
            lastOrderTraverse(root->Left);
            lastOrderTraverse(root->Right);
            cout<<root->data<<' ';
        }
    }
    

    程序代码:

    #include <iostream>
    #include<cstdio>
    #include<cstdlib>
     
    using namespace std;
    
    typedef int TelemType;
    
    typedef struct BinaryTreeNode
    {
        TelemType data;
        struct BinaryTreeNode *Left;
        struct BinaryTreeNode *Right;
    }Node;
    
    
    //创建二叉树,顺序依次为中间节点->左子树->右子树
    Node* createBinaryTree()
    {
        Node *p;
        TelemType ch;
        cin>>ch;
        if(ch == 0)     //如果到了叶子节点,接下来的左、右子树分别赋值为0
        {
            p = NULL;
        }
        else
        {
            p = (Node*)malloc(sizeof(Node));
            p->data = ch;
            p->Left  = createBinaryTree();  //递归创建左子树
            p->Right = createBinaryTree();  //递归创建右子树
        }
        return p;
    }
    
    //先序遍历
    void preOrderTraverse(Node* root)
    {
        if( root )
        {
            cout<<root->data<<' ';
            preOrderTraverse(root->Left);
            preOrderTraverse(root->Right);
        }
    }
    
    //中序遍历
    void inOrderTraverse(Node* root)
    {
        if( root )
        {
            inOrderTraverse(root->Left);
            cout<<root->data<<' ';
            inOrderTraverse(root->Right);
        }
    }
    
    //后序遍历
    void lastOrderTraverse(Node* root)
    {
        if( root )
        {
            lastOrderTraverse(root->Left);
            lastOrderTraverse(root->Right);
            cout<<root->data<<' ';
        }
    }
    
    
    int main()
    {
        Node *root = NULL;
        root = createBinaryTree();
        printf("
    二叉树建立成功!
    ");
        cout<<endl;
     
        cout<<"前序遍历结果:"<<endl;
        preOrderTraverse(root);
        cout<<endl;
     
        cout<<"中序遍历结果:"<<endl;
        inOrderTraverse(root);
        cout<<endl;
     
        cout<<"后序遍历结果:"<<endl;
        lastOrderTraverse(root);
        cout<<endl;
     
        return 0;
    }
    

    程序运行结果:

  • 相关阅读:
    《20170914-构建之法:现代软件工程-阅读笔记》
    《结对-贪吃蛇游戏-开发环境搭建过程》
    《结对-贪吃蛇游戏-设计文档》
    《自我介绍》
    对于软件工程的期望
    GIT的使用方法
    结对-贪吃蛇-需求分析
    团队-井字棋-需求分析
    团队-井字棋-成员简介及分工
    新的目标
  • 原文地址:https://www.cnblogs.com/xyz-8108923246/p/10778547.html
Copyright © 2011-2022 走看看