从上往下打印二叉树——23-创新互联

从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如如下二叉树打印出的结果为1、2、3、4、5、6、7、8、9。

十年的铜川网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整铜川建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“铜川网站设计”,“铜川网站推广”以来,每个客户项目都认真落实执行。

从上往下打印二叉树——23

  上面所说的也就是二叉树的层序遍历,对于层序遍历来说,首先访问的肯定是根节点,然后是其左右结点,之后就是左子树的左右结点和右子树的左右结点,依次往下,如果使用像前中后序遍历那样按照左右结点去递归打印的话肯定是不行的,因为并不能一直先访问某个左结点或者右结点,而是应该左右交叉访问;

  上面的二叉树中,打印的顺序是1、2、3、4、5、6、7、8、9,可以想到按照队列的方式依次将其放入其中,而先进先出,得到的也就是打印的顺序,至于如何存放,可以先将根结点放入其中,拿到队首结点,如果队首结点的左右结点不为NULL,就依次放入队列中,然后将队首元素pop出,再循环取队首元素进行判断放入......直至遍历完二叉树且队列为空为止;

程序设计如下:

#include <iostream>
#include <assert.h>
#include <queue>
using namespace std;

struct BinaryTreeNode//二叉树结点结构体
{
    int _val;
    BinaryTreeNode *_Lnode;
    BinaryTreeNode *_Rnode;

    BinaryTreeNode(int val)//构造函数
        :_val(val)
         ,_Lnode(NULL)
         ,_Rnode(NULL)
    {}
};

BinaryTreeNode* _Create(int *arr, size_t& index, size_t size)//前序方式创建二叉树
{
    if((index < size) && (arr[index] != '#'))
    {
        BinaryTreeNode *root = new BinaryTreeNode(arr[index]);
        root->_Lnode = _Create(arr, ++index, size);
        root->_Rnode = _Create(arr, ++index, size);
        return root;
    }
    else
        return NULL;
}

BinaryTreeNode* CreateBinaryTree(int *arr, size_t size)
{
    assert(arr && size);

    size_t index = 0;
    return _Create(arr, index, size);
}

void DestoryBinaryTree(BinaryTreeNode* root)//销毁二叉树
{
    if(root != NULL)
    {
        DestoryBinaryTree(root->_Lnode);
        DestoryBinaryTree(root->_Rnode);
        delete root;
        root = NULL;
    }
}

void LevelOrderBinaryTree(BinaryTreeNode *root)//层序遍历二叉树
{
    assert(root);
    queue<BinaryTreeNode*> q;

    q.push(root);
    while(!q.empty())
    {
        if(q.front()->_Lnode != NULL)
            q.push(q.front()->_Lnode);
        if(q.front()->_Rnode != NULL)
            q.push(q.front()->_Rnode);

        cout<<q.front()->_val<<" ";
        q.pop();
    }
    cout<<endl;
}

void PrevOrder(BinaryTreeNode* root)//前序遍历二叉树,为了观察二叉树是否创建好
{
    if(root != NULL)
    {
        cout<<root->_val<<" ";
        PrevOrder(root->_Lnode);
        PrevOrder(root->_Rnode);
    }
}

int main()
{
    int arr[] = {1,2,4,'#','#',5,8,'#','#','#',3,6,'#','#',7,'#',9,'#','#'};
    BinaryTreeNode *root = CreateBinaryTree(arr, sizeof(arr)/sizeof(arr[0]));
    cout<<"PrevOrder: ";
    PrevOrder(root);
    cout<<endl;

    cout<<"LevelOrder: ";
    LevelOrderBinaryTree(root);
    DestoryBinaryTree(root);
    return 0;
}

运行程序:

从上往下打印二叉树——23

《完》

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

本文标题:从上往下打印二叉树——23-创新互联
当前网址:https://www.cdcxhl.com/article10/dspsdo.html

成都网站建设公司_创新互联,为您提供App设计GoogleApp开发网站排名企业网站制作虚拟主机

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设