用C语言,用递归或非递归方式求二叉树中序遍历下的第一点
时间: 2024-11-13 20:23:16 浏览: 23
在C语言中,我们可以使用递归或迭代的方式(非递归)来实现二叉树的中序遍历并找到第一个节点。这里分别解释两种方法:
**递归方式**:
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 中序遍历找到最小值(即第一个节点)
TreeNode* findMinInOrder(TreeNode* root) {
if (root == NULL || root->left == NULL) { // 如果根节点为空,或者左子树已空,就是最小值
return root;
}
return findMinInOrder(root->left); // 递归查找左子树的最小值
}
```
在这个递归函数中,我们假设左子树总是包含更小的节点。
**非递归方式(迭代栈)**:
```c
TreeNode* findMinInOrderNonRecursive(TreeNode* root) {
stack<TreeNode*> s;
TreeNode* minNode = NULL;
while (root != NULL || !s.isEmpty()) {
while (root != NULL) {
s.push(root);
root = root->left;
}
root = s.pop();
if (minNode == NULL || root->val < minNode->val) {
minNode = root;
}
root = root->right;
}
return minNode;
}
```
在这个迭代版本中,我们用一个栈来保存待访问的节点,保证了左子树的所有节点都被处理过,然后取当前节点作为最小值节点,直到遍历完整棵树。
阅读全文