这个人懒死了不想写解释
class TreeNode { public: int val; TreeNode *left; TreeNode *right; TreeNode():val(-1),left(NULL),right(NULL) {} TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Tree { public: TreeNode* nodesArray; int total_count; 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() { delete[] nodesArray; } TreeNode* 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->left) { buffer.push(current->left); ++next_level_count; } if (current->right) { buffer.push(current->right); ++next_level_count; }*/ //try to display the null child. 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; } } }
原文:https://www.cnblogs.com/RDaneelOlivaw/p/11178703.html