• 二叉树的构建和层级打印


    #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;
            }
        }
    }
  • 相关阅读:
    调用Android中的软键盘
    EditText图文混排
    android开源框架
    Android 菜单(OptionMenu)
    onRetainNonConfigurationInstance和getLastNonConfigurationInstance
    Android HttpClient基本使用方法
    Eclipse中文注释乱码解决
    mysql怎么定义外键
    javaproject积累——java 反射 invoke
    Floodlight 启动过程分析
  • 原文地址:https://www.cnblogs.com/RDaneelOlivaw/p/11178703.html
Copyright © 2020-2023  润新知