• 二叉树的建立与遍历


    定义二叉树结构体:

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

    程序运行结果:

  • 相关阅读:
    input()和print()函数同时输入输出多个数据--python3
    2018-海信-算法工程师-面试问题
    2018-CVTE中央研究院-自然语言处理算法工程师-电话面问题
    windows服务demo
    C#获取刚插入的数据的id
    .net微软企业库的事务回滚
    C# NPOI的数据批量导入数据库
    C# 使用复选框实现循环添加多条信息入库!
    C# DataSet与DataTable的区别和用法
    C#如何编写短信接口,以及接口的调用,包括C#.net访问web,并处理返回值的简例。
  • 原文地址:https://www.cnblogs.com/xyz-8108923246/p/10778547.html
Copyright © 2020-2023  润新知