2.编写递归算法,在二叉树中求位于先序序列中第k个位置的结点。
时间: 2023-04-28 20:01:31 浏览: 147
可以按照先序遍历的顺序,递归地遍历二叉树,并记录当前遍历到的结点位置。当遍历到第k个位置时,返回该结点即可。
具体实现可以参考以下代码:
```
// 定义二叉树结点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 递归函数,返回先序序列中第k个位置的结点
TreeNode* findKthNode(TreeNode* root, int& k) {
if (root == NULL) {
return NULL;
}
if (--k == ) {
return root;
}
TreeNode* left = findKthNode(root->left, k);
if (left != NULL) {
return left;
}
return findKthNode(root->right, k);
}
// 测试代码
int main() {
// 构造二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
// 求先序序列中第3个位置的结点
int k = 3;
TreeNode* node = findKthNode(root, k);
if (node != NULL) {
cout << node->val << endl; // 输出3
}
return ;
}
```
阅读全文