二叉树的中序遍历(递归)

中序遍历二叉树的过程如下:
二叉树的存储结构:

 typedef struct node{
       int data;
       struct node * lchild; //指向左孩子的结点
       struct node * rchild; //指向右孩子的结点
   }BTNode;

思路:
1.遍历左子树节点
2.访问根节点
3.遍历右子树节点

C代码实现:

void InOrder(BTNode * b){ //中序遍历
       if(b != null){
           InOrder(b->lchild);
           printf("%c",b->data); //访问根节点
           InOrder(b->rchild);
       }
   }

### 二叉树序遍历递归算法实现 二叉树的中序遍历是一种经典的树遍历方式,按照“左-根-右”的顺序依次访问节点。递归算法通过函数调用栈来模拟这一过程,其实现逻辑简单明了。 以下是基于 Java 和 Python 的二叉树序遍历递归算法实现: #### Java 版本 ```java import java.util.ArrayList; import java.util.List; class TreeNode { int val; TreeNode left, right; TreeNode(int x) { val = x; } } public class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); inorder(root, result); return result; } private void inorder(TreeNode node, List<Integer> result) { if (node == null) return; // 如果当前节点为空,则返回 inorder(node.left, result); // 遍历左子树 result.add(node.val); // 处理当前节点(加入结果列表) inorder(node.right, result); // 遍历右子树 } } ``` 此代码实现了中序遍历的核心逻辑:先递归遍历左子树,再处理当前节点,最后递归遍历右子树[^2]。 --- #### Python 版本 ```python # 定义二叉树节点类 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def inorder_traversal(root): result = [] def dfs(node): # 使用内部函数进行递归操作 if not node: # 基础情况:如果节点为空则直接返回 return dfs(node.left) # 左子树递归 result.append(node.val) # 当前节点值存入结果 dfs(node.right) # 右子树递归 dfs(root) # 调用递归函数 return result # 返回最终结果 ``` Python 实现同样遵循“左-根-右”的原则,利用递归来简化控制流程[^3]。 --- ### 关键点解析 1. **递归终止条件** 在每次递归调用之前,都需要判断当前节点是否为空。如果是空节点,则直接返回,不再继续递归。 2. **访问顺序** 中序遍历严格按“左-根-右”的顺序执行。对于每一个节点,优先递归其左子树,接着处理当前节点本身,最后递归右子树。 3. **时间复杂度与空间复杂度** 时间复杂度为 \(O(n)\),其中 \(n\)二叉树中的节点总数,因为每个节点都会被访问一次且仅一次。空间复杂度取决于递归深度,最坏情况下为 \(O(h)\),\(h\) 表示树的高度[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值