二叉树的构建和层级打印
#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; } } }