zoukankan      html  css  js  c++  java
  • 17-- 从上到下打印二叉树,按层打印。

    //
    //  main.cpp
    //  subStructureInTree
    //
    //  Created by Hugo Cao  on 15/7/10.
    //  Copyright (c) 2015年 Hugo Cao . All rights reserved.
    //
    
    /*
     问题描述:
        从上到下打印二叉树,按层打印。
        思路:这里用队列实现了转化。很有意思的想法。
     
     */
    
    #include <iostream>
    #include <deque>
    using namespace std;
    #define Data int
    
    typedef struct binaaryTreeNode
    {
        Data m_value;
        binaaryTreeNode *m_pleft;
        binaaryTreeNode *m_pright;
    }btNode, *binTree;
    
    binTree addNode(Data value)
    {
        binTree bt = NULL;
        bt = new btNode;
        if (bt == NULL)
        {
            cout << "申请地址错误" << endl;
            return NULL;
        }
        
        bt->m_value = value;
        bt->m_pleft = NULL;
        bt->m_pright = NULL;
        
        return bt;
    }
    
    bool connectTreeNode(binTree parrentNode, binTree leftSonNode = NULL, binTree rightSonNode = NULL)
    {
        if (parrentNode == NULL || (leftSonNode == NULL && rightSonNode == NULL))
        {
            cout << "结点输入问题" << endl;
            return false;
        }
        parrentNode->m_pleft  = leftSonNode;
        parrentNode->m_pright = rightSonNode;
        return true;
    }
    
    binTree createBinaryATree(binTree Ahead)
    {
        binTree p1 = addNode(8);
        binTree p2 = addNode(8);
        binTree p3 = addNode(7);
        binTree p4 = addNode(9);
        binTree p5 = addNode(2);
        binTree p6 = addNode(4);
        binTree p7 = addNode(7);
        
        connectTreeNode(p1, p2, p3);
        connectTreeNode(p2, p4, p5);
        connectTreeNode(p5, p6, p7);
        
        return (Ahead = p1);
    }
    
    
    //按层打印
    void PrintFromTopToButtom(binTree bt)
    {
        //如果是空结点就退出
        if (!bt)
        {
            return ;
        }
        //使用队列作为模型
        deque<binTree> dequeTreeNode;
        dequeTreeNode.push_back(bt);    //将根结点压入队列
        
        //栈为空的时候退出循环
        while (dequeTreeNode.size()) 
        {
            //返回队列头指针
            binTree pNode = dequeTreeNode.front();
            printf("%d
    ", pNode->m_value);     //打印向量信息
            dequeTreeNode.pop_front();          //弹出
            
            //层遍历,其实也是先左后右,向队列压入元素。
            if (pNode->m_pleft)
            {
                dequeTreeNode.push_back(pNode->m_pleft);
            }
            if (pNode->m_pright)
            {
                dequeTreeNode.push_back(pNode->m_pright);
            }
        }
    
    }
    
    //打印二叉树
    void BLR_print_BinaryTree(binTree bt)
    {
        if (bt == NULL)
            return ;
        
        cout << bt->m_value << "  " << endl;
        BLR_print_BinaryTree(bt->m_pleft);
        BLR_print_BinaryTree(bt->m_pright);
    }
    
    
    int main()
    {
        binTree bt_A = NULL;
        bt_A = createBinaryATree(bt_A);
        PrintFromTopToButtom(bt_A);
        cout << endl;
        
       
        return 0;
    }
  • 相关阅读:
    操作 Java 数组的 12 个最佳方法
    详解 JavaScript 中 splice() 方法
    Java 读取 .properties 配置文件的几种方式
    表单中单选、多选、选择框值的获取及表单的序列化
    一个调出上下文菜单的实例
    跨浏览器的事件侦听器和事件对象
    动态加载js和css
    php语言实现的7种基本的排序方法
    CORS(跨源资源共享)实战
    ubuntu中LAMP环境搭建及ubuntu语言和输入法设置
  • 原文地址:https://www.cnblogs.com/hgonlywj/p/4842566.html
Copyright © 2011-2022 走看看