在本教程中,我们将讨论在二进制树的两个给定级别编号之间打印节点的程序。
在这种情况下,将为特定的二叉树提供低层和高层,并且我们必须打印给定层之间的所有元素。
为了解决这个问题,我们可以使用基于队列的级别遍历。在进行有序遍历时,我们可以在每个级别的末尾都有一个标记节点。然后,如果标记节点存在于给定级别之间,则可以转到每个级别并打印其节点。
#include <iostream> #include <queue> using namespace std; struct Node{ int data; struct Node* left, *right; }; //打印级别之间的节点 void print_nodes(Node* root, int low, int high){ queue <Node *> Q; //创建标记节点 Node *marker = new Node; int level = 1; Q.push(root); Q.push(marker); while (Q.empty() == false){ Node *n = Q.front(); Q.pop(); //检查水平结束 if (n == marker){ cout << endl; level++; if (Q.empty() == true || level > high) break; Q.push(marker); continue; } if (level >= low) cout << n->data << " "; if (n->left != NULL) Q.push(n->left); if (n->right != NULL) Q.push(n->right); } } Node* create_node(int data){ Node* temp = new Node; temp->data = data; temp->left = temp->right = NULL; return (temp); } int main(){ struct Node *root= create_node(20); root->left= create_node(8); root->right= create_node(22); root->left->left= create_node(4); root->left->right= create_node(12); root->left->right->left= create_node(10); root->left->right->right= create_node(14); cout << "给定级别之间的元素是:"; print_nodes(root, 2, 3); return 0; }
输出结果
给定级别之间的元素是: 8 22 4 12