zoukankan      html  css  js  c++  java
  • DS二叉树--二叉树之父子结点

    题目描述

    给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构。

    编写程序输出该树的所有叶子结点和它们的父亲结点

    输入

    第一行输入一个整数t,表示有t个二叉树

    第二行起,按照题目表示的输入方法,输入每个二叉树的先序遍历,连续输入t行

    输出

    第一行按先序遍历,输出第1个示例的叶子节点

    第二行输出第1个示例中与叶子相对应的父亲节点

    以此类推输出其它示例的结果

    样例输入

    3
    AB0C00D00
    AB00C00
    ABCD0000EF000

    样例输出

    C D
    B A
    B C
    A A
    D F
    C E
     
    在递归遍历的时候传入父节点的data,若判断为叶子节点则将该data入队
    #include<iostream>
    #include<queue>
    #include<string>
    using namespace std;
    class BitreeNode
    {
    public:
        char data;
        BitreeNode *left;
        BitreeNode *right;
        BitreeNode() :left(NULL), right(NULL) {}
        ~BitreeNode() {}
    };
    class Bitree
    {
    private:
        BitreeNode *Root;
        int pos;
        string strtree;
        BitreeNode *CreateBitree();
        void countleaves(BitreeNode *t,char fatherdata);
    public:
        queue<char> q;
        Bitree() {};
        ~Bitree() {};
        void CreateTree(string TreeArray);
        void countleaves();
    };
    void Bitree::CreateTree(string treearray)
    {
        pos = 0;
        strtree.assign(treearray);
        Root = CreateBitree();
    }
    BitreeNode *Bitree::CreateBitree()
    {
        BitreeNode *T;
        char ch;
        ch = strtree[pos++];
        if (ch == '0')
            T = NULL;
        else
        {
            T = new BitreeNode();
            T->data = ch;
            T->left = CreateBitree();
            T->right = CreateBitree();
        }
        return T;
    }
    void Bitree::countleaves()
    {
        pos = 0;
        countleaves(Root,Root->data);
        cout << endl;
        while (!q.empty())
        {
            cout << q.front()<<" ";
            q.pop();
        }
        cout << endl;
    }
    void Bitree::countleaves(BitreeNode *t,char fatherdata)
    {
        if (t)
        {
            if (!t->left && !t->right)
            {                
                cout << t->data << " ";
                q.push(fatherdata);
            }
            countleaves(t->left,t->data);
            countleaves(t->right,t->data);
            
        }
    }
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            string str;
            cin >> str;
            Bitree *tree;
            tree = new Bitree();
            tree->CreateTree(str);
            tree->countleaves();
        }
    }
  • 相关阅读:
    [转]oracle 10g数据泵之impdp-同时导入多个文件
    IMP数据到指定的表空间
    [转]Oracle数据泵的使用
    [转]oracle pump expdp impdp使用
    liunx 安装ActiveMQ 及 spring boot 初步整合 activemq
    安装本地jar包到仓库
    centos7.4 64位安装 git
    出现 CannotAcquireLockException 异常
    centos7.4 64位安装 redis-4.0.0
    java代码定时备份mysql数据库及注意事项——基于 springboot
  • 原文地址:https://www.cnblogs.com/Liu269393/p/10217572.html
Copyright © 2011-2022 走看看