,建立一棵采用二叉链表结构存储的二叉树,C++输出二叉树先序序列前k个结点的值
#include <iostream>
#include <vector>
using namespace std;
// 二叉树结点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 先序遍历二叉树,并将前k个结点的值存入vector中
void preorder(TreeNode* root, int k, vector<int>& result) {
if (root == nullptr || k <= 0) {
return;
}
result.push_back(root->val);
preorder(root->left, k-1, result);
preorder(root->right, k-1, result);
}
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);
// 输出前k个结点的先序遍历序列
int k = 3;
vector<int> result;
preorder(root, k, result);
for (int i = 0; i < result.size(); i++) {
cout << result[i] << " ";
}
cout << endl;
return 0;
}
在上面的代码中,我们定义了一个TreeNode结构体表示二叉树的结点,并实现了一个preorder函数来进行二叉树的先序遍历,并将前k个结点的值存入vector中。最后在main函数中构造了一棵二叉树,并调用preorder函数输出前k个结点的先序遍历序列。
不知道你这个问题是否已经解决, 如果还没有解决的话:/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
// 设置一个结点先走k步,然后一起走
if (pListHead == nullptr) return NULL;
if (k < 0) return NULL;
ListNode* p = pListHead;
for (int i = 0; i< k-1; i++){
p = p->next;
if (p == nullptr) return NULL;
}
while (p->next != nullptr){
p = p->next;
pListHead = pListHead->next;
}
return pListHead;
}
};