输出不太对,只考虑了完全二叉树的情况。。。
代码:
#include <iostream> #include <queue> #include <vector> #include <math.h> typedef struct BaseNode* tree; struct BaseNode { int val; BaseNode* left; BaseNode* right; BaseNode() {}; BaseNode(int v) : val(v), left(nullptr), right(nullptr) { } }; void insert(tree & root, int & v) { std::cin >> v; if (v == 0) root = nullptr; else { root = new BaseNode(v); insert(root->left, v); insert(root->right, v); } } void sequence(tree root) { std::queue<tree> nodes; std::vector<int> nums; tree rptr = root; nodes.push(rptr); while (!nodes.empty()) { rptr = nodes.front(); nodes.pop(); if (rptr) { nums.push_back(rptr->val); nodes.push(rptr->left); nodes.push(rptr->right); } } for (int i = 0; i < int(log(nums.size() + 1)); i++) { for (int j = 0; j < nums.size() - i; j++) std::cout << " "; for (int j = (i < 2 ? i : i + 1); j <= 2 * i; j++) std::cout << nums[j] << " "; std::cout << std::endl; } } int main() { tree root; int v; insert(root, v); sequence(root); return 0; }