首页 > 代码库 > 二叉树的边界打印

二叉树的边界打印

2017-07-11 22:59:29

二叉树的边界打印刚开始看到的时候觉得还是有难度的,主要是想一次通过递归完成,不过后来,在车下仔细思考后觉得其实是很简单的一个问题。

基本思路就是按左子树,叶子子树和右子树进行分别的打印就可以很好的解决这个问题。

而每一部分的打印只需要使用基本的递归思想就可以了。

具体的代码如下:

void leftin(Bintree* root)
{
    if(root&&root->left)
    {
        cout<<root->data<<" ";
        leftin(root->left);
    }
}

bool isleaf(Bintree* node)
{
    if(!node->left&&!node->right) return true;
    else return false;
}

void bottomin(Bintree* root)
{
    if(root)
    {
        if(isleaf(root)) cout<<root->data<<" ";
        else
        {
            bottomin(root->left);
            bottomin(root->right);
        }
    }
}

void rightin(Bintree* root)
{
    if(root&&root->right)
    {
        rightin(root->right);
        cout<<root->data<<" ";
    }
}

void printtree(Bintree* root)
{
    leftin(root);
    bottomin(root);
    rightin(root->right);
}

最后需要注意的是题目要求,如果是按边界进行逆时针输出则可以直接使用本方法,如果是顺时针,或者其他方向输出,则可能需要进行部分的修改。不过都是小修小补,应该问题不大。

 

二叉树的边界打印