用 C++ 查找二叉树先序遍历中的第 n 个节点


在这个问题中,我们给定一个二叉树和一个整数 N。任务是找到二叉树先序遍历中的第 n 个节点。

一个二叉树有一个特殊条件,即每个节点最多可以有两个子节点。

遍历是一个访问树的所有节点的过程,也可能打印它们的值。

让我们来看一个例子来理解这个问题:

输入

N = 6

输出

6

解释

Pre order traversal of tree : 1, 2, 4, 5, 3, 6, 7

解决方案方法

其思想是使用二叉树的先序遍历,该遍历是通过递归调用完成的。在每次调用中,我们将访问根节点,然后首先为左子树调用 preOrder(),然后调用 preOrder()。在这个遍历过程中,我们将计数节点数,并打印计数为 N 的节点。

程序说明了我们解决方案的工作原理:

示例

 在线演示

#include <iostream>
using namespace std;
struct Node {
   int data;
   Node *left, *right;
};
struct Node* createNode(int item){
   Node* temp = new Node;
   temp->data = item;
   temp->left = NULL;
   temp->right = NULL;
   return temp;
}
void findPreOrderTraversalRec(struct Node* root, int N){
   static int nodeCount = 0;
   if (root == NULL)
      return;
   if (nodeCount <= N) {
      nodeCount++;
      if (nodeCount == N)
         cout << root->data;
         findPreOrderTraversalRec(root->left, N);
         findPreOrderTraversalRec(root->right, N);
      }
   }
   int main() {
      struct Node* root = createNode(1);
      root->left = createNode(2);
      root->right = createNode(3);
      root->left->left = createNode(4);
      root->left->right = createNode(5);
      root->right->left = createNode(6);
      root->right->right = createNode(7);
      int N = 6;
      cout<<N<<"th node in preorder traversal is ";
      findPreOrderTraversalRec(root, N);
      return 0;
}

输出

6th node in preorder traversal is 6

更新于:2021年3月13日

209 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告