程序使用C ++在二叉树的两个给定级别编号之间打印节点

在本教程中,我们将讨论在二进制树的两个给定级别编号之间打印节点的程序。

在这种情况下,将为特定的二叉树提供低层和高层,并且我们必须打印给定层之间的所有元素。

为了解决这个问题,我们可以使用基于队列的级别遍历。在进行有序遍历时,我们可以在每个级别的末尾都有一个标记节点。然后,如果标记节点存在于给定级别之间,则可以转到每个级别并打印其节点。

示例

#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