树转化成二叉树



    #include "stdafx.h"  
    #include <iostream>  
    #include <string>  
    using namespace std;  
    //树的节点  
    struct TreeNode  
    {  
        char element;  
        int childNumbers;//孩子结点的个数  
        struct TreeNode* child[3];//孩子的数组  
        TreeNode(){}  
        TreeNode(char ele, int numbers)  
        {  
            element = ele;  
            childNumbers = numbers;  
            for (int i=0; i<3; i++)  
                child[i] = NULL;  
        }  
        //重载赋值运算符  
        TreeNode& operator = (const TreeNode& other)  
        {  
            if(this == &other)  
                return *this;  
            else  
            {  
                element = other.element;  
                childNumbers = other.childNumbers;  
                for (int i=0; i<3; i++)  
                    child[i] = other.child[i];  
            }  
        }  
    };  
    //二叉树的结点  
    typedef struct BTreeNode  
    {  
        char element;  
        BTreeNode *left;  
        BTreeNode *right;  
        BTreeNode(char ele = 0, BTreeNode *lchild = NULL, BTreeNode *rchild=NULL)  
        {  
            element = ele;  
            left = lchild;  
            right = rchild;  
        }  
    }BTreeNode;  
    //构建树  
    void CreateTree(TreeNode* &root)  
    {  
        TreeNode *e = new TreeNode('E', 0);  
        TreeNode *f = new TreeNode('F', 0);  
        TreeNode *b = new TreeNode('B', 2);  
        b->child[0] = e;  
        b->child[1] = f;  
        TreeNode *g = new TreeNode('G', 0);  
        TreeNode *d = new TreeNode('D', 1);  
        d->child[0]= g;  
        TreeNode *c = new TreeNode('C', 0);  
        root = new TreeNode('A', 3);  
        root->child[0] = b;  
        root->child[1] = c;  
        root->child[2] = d;  
    }  
    //将树转换为二叉树  
    BTreeNode* TreeToBinaryTree(TreeNode *treeRoot)  
    {  
        if (treeRoot == NULL)  
        {  
            return NULL;  
        }  
        BTreeNode* binaryRoot = new BTreeNode; //二叉树的根  
        binaryRoot->element = treeRoot->element;  
        binaryRoot->left = TreeToBinaryTree(treeRoot->child[0]); //左孩子  
        BTreeNode *brotherChild = binaryRoot->left; //兄弟  
        for (int i= 1; i<treeRoot->childNumbers; i++)  
        {  
            brotherChild->right = TreeToBinaryTree(treeRoot->child[i]);  
            brotherChild = brotherChild->right;  
        }  
        return binaryRoot;  
    }  
    //二叉树中序输出  
    void MiddleOrderPrint(BTreeNode *root)  
    {  
        BTreeNode *temp = root;  
        if(temp == NULL)  
            return;  
        else  
        {  
            MiddleOrderPrint(temp->left);  
            cout<<root->element<<" ";  
            MiddleOrderPrint(temp->right);  
        }  
    }  
    int main()  
    {  
        TreeNode *treeRoot;  
        CreateTree(treeRoot);  
        BTreeNode *binaryRoot = TreeToBinaryTree(treeRoot);  
        MiddleOrderPrint(binaryRoot);  
        cout<<endl;  
        return 0;  
    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值