用 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
广告