zoukankan      html  css  js  c++  java
  • 逐层打印二叉树

    原题: 怎样从顶部开始逐层打印二叉树结点数据?

    分析:逐层打印是个很明显的广度优先算法,BFS的首选自然是用队列保存没有被遍历过的节点,每一层查一个marker以区分不同的层,算法复杂度是每个节点被遍历一次,所以为O(n),空间复杂度为某一层的最大节点数。为O(lg(n))。

    原题: 怎样把二叉树按zig-zag的顺序转换为一个链表?

    分析:这个是类似的,不过就用栈了,计算复杂度为O(n),空间复杂度为O(log(n))。

    void printTreeByLevel(BinaryTreeNode * root)
    {
        stack<BinaryTreeNode *> nodes_0;
        stack<BinaryTreeNode *> nodes_1;
        if(root == NULL)
            return ;
        nodes_0.push(root);
        stack<BinaryTreeNode *> * currentLevelNodes = &nodes_0;
        stack<BinaryTreeNode *> * nextLevelNodes = &nodes_1;

        while(currentLevelNodes->size()>0)
        {
            BinaryTreeNode * t = currentLevelNodes->top();
                  currentLevelNodes->pop();
            cout<<t->value<<endl;
            if(currentLevelNodes == &nodes_0)
            {
                if(t->right !=NULL)
                         {
                               nextLevelNodes->push(t->right);
                         }
               if(t->left !=NULL)
                         {
                               nextLevelNodes->push(t->left);
                     }
            }
            else 
            {
                if(t->left !=NULL)
                         {
                               nextLevelNodes->push(t->left);
                         }
                if(t->right !=NULL)
                         {
                               nextLevelNodes->push(t->right);
                         }
            }
            if( currentLevelNodes->size() ==0)
                swap(currentLevelNodes ,nextLevelNodes );
             
        }
        
    }
  • 相关阅读:
    用C++读写EXCEL文件的几种方式比较
    20个值得收藏的网页设计开放课件
    char* 应用, 去除字符串内多余空格, 用算法而非库函数
    东拉西扯:王建硕主义
    Lisp 的本质(The Nature of Lisp)
    web前端:html
    [原译]理解并实现原型模式实现ICloneable接口.理解深浅拷贝
    [原译]理解并实现装饰器模式
    3分钟理解Lambda表达式
    [原译]实现IEnumerable接口&理解yield关键字
  • 原文地址:https://www.cnblogs.com/whyandinside/p/2571823.html
Copyright © 2011-2022 走看看