zoukankan      html  css  js  c++  java
  • 二叉树基本操作--创建,三种遍历,叶子节点

         虽然二叉树的操作很常见,但是认真写写熟悉很重要,特别是typedef,

    CreateBiTree(BiTNode** T)指针的操作等等,还有就是创建方法,去实际输入值就知道其中的妙处,为-1时为空节点。
    #include <iostream>
    using namespace std;
    
    //节点的定义
    typedef struct BTNode
    {
        int data;
        BTNode* rChild;
        BTNode* lChild;
    }BiTNode, *BiTree;
    
    
    //二叉树的创建,先序创建二叉树
    int CreateBiTree(BiTNode** T)
    {
        int ch;
        cin >> ch;
        if (ch==-1)
        {
            *T = nullptr;
            return 0;
        }
        else
        {
            //*T = new BiTNode();
            *T = (BiTNode*)malloc(sizeof(BiTNode));
            if (T==nullptr)
            {
                cout << "failed!
    ";
                return 0;
            }
            else
            {
                (*T)->data = ch;
                cout << "输入左子节点:";
                //cin >> ch;
                CreateBiTree(&(*T)->lChild);
                cout << endl;
                cout << "输入右子节点:";
                //cin >> ch;
                CreateBiTree(&(*T)->rChild);
            }
        }
        return 1;
    }
    
    
    //先序遍历二叉树
    void PreOrderBiTree(BiTNode* T)
    {
        if (T == nullptr)
        {
            return;
        }
        else
        {
            cout << T->data<<" ";
            PreOrderBiTree(T->lChild);
            PreOrderBiTree(T->rChild);
        }
    }
    
    //中序遍历二叉树
    void InOrderBiTree(BiTNode* T)
    {
        if (T == nullptr)
        {
            return;
        }
        else
        {
            InOrderBiTree(T->lChild);
            cout << T->data << " ";
            InOrderBiTree(T->rChild);
        }
    }
    
    //后续遍历二叉树
    void PostOrderBiTree(BiTNode* T)
    {
        if (T == nullptr)
        {
            return;
        }
        else
        {
            PostOrderBiTree(T->lChild);
            PostOrderBiTree(T->rChild);
            cout << T->data << " ";
        }
    }
    
    //树高....
    
    //叶子节点个数
    int LeafCount(BiTNode* T)
    {
        static int count = 0;
        if (T!=nullptr)
        {
            if (T->lChild==nullptr&&T->rChild==nullptr)
            {
                count++;
            }
            LeafCount(T->lChild);
            LeafCount(T->rChild);
        }
        return count;
    }
    
    //客户端测试
    int main()
    {
        BiTNode* T;
        int leafCount = 0;
        cout << "请输入第一个节点的值,-1表示没有节点:
    ";
        CreateBiTree(&T);
    
        cout << "先序遍历二叉树:";
        PreOrderBiTree(T);
        cout << endl;
    
        cout << "中序遍历二叉树:";
        InOrderBiTree(T);
        cout << endl;
    
        cout << "后序遍历二叉树: ";
        PostOrderBiTree(T);
        cout << endl;
    
        leafCount = LeafCount(T);
        cout << "叶子节点的个数:" <<leafCount<< endl;
    
    
        return 0;
    }
  • 相关阅读:
    找出数组中出现次数超过一半的数字(众数)
    消失的两个数字(1-N缺两个数)
    47. Permutations II
    137. Single Number II
    Go语言内存分配(详述 转)
    Go语言内存分配(简述 转)
    redis分布式锁
    Golang调度器GMP原理与调度全分析(转 侵 删)
    android framework navigationbar自定义
    android studio使用中遇到的问题
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/5936829.html
Copyright © 2011-2022 走看看