输出二叉树第k层结点
时间: 2024-02-20 19:53:51 浏览: 23
以下是输出二叉树第k层结点的Python代码实现:
```python
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def print_k_level(root, k):
if not root:
return
if k == 1:
print(root.val)
else:
print_k_level(root.left, k-1)
print_k_level(root.right, k-1)
# 示例
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print("二叉树第2层结点:")
print_k_level(root, 2)
```
相关问题
输出二叉树先序遍历结果的第k个结点
假设二叉树的先序遍历结果为 preOrderList,则该问题可以通过以下步骤解决:
1. 定义一个计数器 count 和一个指针 index,初始值分别为 0 和 0。
2. 从 preOrderList 中依次取出每个结点值进行判断:
- 如果 count 的值等于 k,返回当前结点的值。
- 如果 count 的值小于 k,将 count 的值加 1。
3. 如果遍历结束还没有找到第 k 个结点,则返回空。
以下是一个 Python 实现的代码示例:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def kth_node_of_pre_order_traversal(root: TreeNode, k: int) -> int:
if not root or k <= 0:
return None
pre_order_list = []
stack = [root]
while stack:
node = stack.pop()
pre_order_list.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
count = 0
index = 0
while index < len(pre_order_list):
if count == k:
return pre_order_list[index]
if count < k:
count += 1
index += 1
return None
```
其中,类 TreeNode 定义了二叉树的结构,函数 kth_node_of_pre_order_traversal 实现了输出二叉树先序遍历结果的第 k 个结点的功能。
c语言输出二叉树先序遍历结果的第k个结点
可以使用递归的方法实现二叉树的先序遍历,并记录遍历到的结点个数。当遍历到第k个结点时,输出该结点的值即可。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点定义
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 记录遍历到的结点个数
int count = 0;
// 先序遍历二叉树,返回第k个结点
struct TreeNode* preorder(struct TreeNode* root, int k) {
if (root == NULL) {
return NULL;
}
count++;
if (count == k) {
return root;
}
struct TreeNode* left = preorder(root->left, k);
if (left != NULL) {
return left;
}
struct TreeNode* right = preorder(root->right, k);
if (right != NULL) {
return right;
}
return NULL;
}
int main() {
// 构造二叉树
struct TreeNode* node1 = (struct TreeNode*)malloc(sizeof(struct TreeNode));
struct TreeNode* node2 = (struct TreeNode*)malloc(sizeof(struct TreeNode));
struct TreeNode* node3 = (struct TreeNode*)malloc(sizeof(struct TreeNode));
struct TreeNode* node4 = (struct TreeNode*)malloc(sizeof(struct TreeNode));
struct TreeNode* node5 = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node1->val = 1;
node2->val = 2;
node3->val = 3;
node4->val = 4;
node5->val = 5;
node1->left = node2;
node1->right = node3;
node2->left = node4;
node2->right = NULL;
node3->left = NULL;
node3->right = node5;
node4->left = NULL;
node4->right = NULL;
node5->left = NULL;
node5->right = NULL;
// 输出第3个结点的值,预期结果为4
struct TreeNode* node = preorder(node1, 3);
printf("%d\n", node->val);
return 0;
}
```
输出结果为:
```
4
```