zoukankan      html  css  js  c++  java
  • 二叉树的构建和层级打印

    #ifndef tree_hpp
    #define tree_hpp
    
    class TreeNode {
      public:
        int val;
        TreeNode *left;
        TreeNode *right;
        TreeNode();
        TreeNode(int x);
     };
    
    class Tree {
      public:
        TreeNode* nodesArray;
        int total_count;
        Tree(int[], int);
        ~Tree();
        TreeNode* getRoot();
    };
    
    
    void print(TreeNode*);
    
    #endif /* tree_hpp */
    #include "tree.hpp"
    #include <iostream>
    #include <queue>
    using namespace std;
    
    TreeNode::TreeNode():val(-1),left(NULL),right(NULL) {}
    TreeNode::TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    
    
    Tree::Tree(int arr[], int count) : total_count(count) {
        nodesArray=new TreeNode[count];
        for (int i=0;i<count;i++)
            nodesArray[i].val=arr[i];
        for (int k=1;k<count;k++) {
            if (nodesArray[k].val==-1)//should be empty child
                continue;
            if (k%2==0)
                nodesArray[k/2-1].right=&nodesArray[k];
            else
                nodesArray[k/2].left=&nodesArray[k];
        }
    }
    Tree::~Tree() {
        delete[] nodesArray;
    }
    TreeNode* Tree::getRoot() {
        return &nodesArray[0];
    }
    
    void print(TreeNode* root) {
        if (!root)
            return;
        queue<TreeNode*> buffer;
        buffer.push(root);
        int current_level_count=1, next_level_count=0;
        while (!buffer.empty()) {
            TreeNode* current=buffer.front();
            buffer.pop();
            if (current)
                cout << current->val << ' ';
            else
                cout << "null ";
            --current_level_count;
            if (current) {
                buffer.push(current->left);
                buffer.push(current->right);
                next_level_count+=2;
            }
            if (current_level_count==0) {
                cout << endl;
                current_level_count=next_level_count;
                next_level_count=0;
            }
        }
    }
  • 相关阅读:
    Ubuntu 16.04 安装 .NET Core[转]
    SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试 [T]
    npm package
    RN 文件上传下载
    RN css整理
    react nginx配置
    macOS安装homebrew报错 errno 54 & port 443:Connection refused
    shopify插件开发oauth报400的解决办法
    Mac下更新Ruby版本
    Failed to connect to raw.githubusercontent.com port 443 解决方案
  • 原文地址:https://www.cnblogs.com/RDaneelOlivaw/p/11178703.html
Copyright © 2011-2022 走看看