// 3_10.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <vector> struct Node { int data; Node * left; Node * right; }; int printByLevel(Node * root, int level) { if(!root || level < 0) return 0; if(level == 0) { printf("%d ",root->data); return 1; } return printByLevel(root->left, level-1) + printByLevel(root->right, level-1); } //不使用queue的原因是不能区分每一层的结束,没法分行输出 void print(Node * root) { std::vector<Node*> vec; vec.push_back(root); int cur = 0; int last = 1; while(cur<vec.size()) { last = vec.size(); while(cur < last) { printf("%d ", vec[cur]->data); if(vec[cur]->left != NULL) vec.push_back(vec[cur]->left); if(vec[cur]->right != NULL) vec.push_back(vec[cur]->right); cur++; } printf("\n"); } } int _tmain(int argc, _TCHAR* argv[]) { Node * root = new Node(); Node * n1 = new Node(); Node * n2 = new Node(); Node * n3 = new Node(); root->data = 0; root->left = n1; root->right = n2; n1->left = NULL; n1->right = NULL; n2->left = n3; n2->right = NULL; n3->left = NULL; n3->right = NULL; n1->data = 1; n2->data = 2; n3->data = 3; printByLevel(root,1); printf("\n"); print(root); return 0; }