遍历树的第三层节点的值

public static void thirdLevel (Tree root, int level) {
		if (root == null)
			return;
		level++;
		if (level == 3)
			System.out.println(root.val);
		thirdLevel(root.left, level);
		thirdLevel(root.right, level);
			
	}
本来想把level作为类的元素,但是回头一想,如果先序遍历的话,左节点是满足了,右结果就悲剧了。所以作为局部变量最好了。
在C语言中,实现输出二叉的先序遍历并找到第k个节点,通常需要递归的方法。先序遍历的顺序是根节点 -> 左子 -> 右子。以下是基本步骤: 1. 定义结构体表示二叉节点,包含整数和左右子节点指针: ```c typedef struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; } TreeNode; ``` 2. 定义一个函数`findKthNodePreOrder`来寻找第k个节点。这里采用辅助栈来记录遍历过程,当节点数达到k时返回当前节点,否则继续递归遍历左子: ```c int findKthNode(TreeNode* root, int k, int count) { if (root == NULL || count >= k) { return -1; // 如果到达空节点或计数超过k,则返回-1表示未找到 } // 先处理左子 if (count < k) { int leftCount = findKthNode(root->left, k, count + 1); if (leftCount != -1) { return leftCount; } } // 将当前节点入栈,并更新计数 count++; stack[++top] = root; // 处理右子 return findKthNode(root->right, k, count); } ``` 3. 最终,在主函数中调用上述函数,传入根节点、k以及初始计数0: ```c int main() { TreeNode* root = ...; // 初始化二叉的根节点 int k; scanf("%d", &k); int result = findKthNode(root, k, 0); if (result != -1) printf("第 %d 个节点是:%d\n", k, result); else printf("找不到第 %d 个节点\n", k); return 0; } ``` 请注意,此代码假设输入合法,实际应用中你需要加上错误检查。另外,如果二叉的大小未知且可能会很大,这种方法的时间复杂度较高,因为它需要遍历整个。对于大规模数据,可以考虑优化算法,如使用队列等其他数据结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值