二叉树 中序、前序、后序遍历 ,递归实现及非递归实现(Java)

遍历递归实现

中序遍历

public static List<Integer> inorderTraversal(TreeNode root){
List<Integer> nodes = new LinkedList<>();
dfs(root, nodes);
return nodes;
}
private static void dfs(TreeNode root, List<Integer> nodes) {
if(root != null){
dfs(root.left, nodes);
nodes.add(root.val);
dfs(root.right, nodes);
}
}

前序遍历

只用将dfsnodes.add(root.val)移至dfs(root.left, nodes)

后遍历

只用将dfsnodes.add(root.val)移至dfs(root.right, nodes)

非递归实现

中序遍历

public static List<Integer> inorderTraversal(TreeNode root){
List<Integer> nodes = new LinkedList<>();
Deque<TreeNode> stack = new ArrayDeque<>();
TreeNode cur = root;
while(cur != null || !stack.isEmpty()){
while(cur != null){
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
nodes.add(cur.val);
cur = cur.right;
}
return nodes;
}

先序遍历

public static List<Integer> preOrderTraversal(TreeNode root){
List<Integer> nodes = new LinkedList<>();
Deque<TreeNode> stack = new ArrayDeque<>();
TreeNode cur = root;
while(cur != null || !stack.isEmpty()){
while(cur != null){
nodes.add(cur.val);
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
cur = cur.right;
}
return nodes;
}

后续遍历

public static List<Integer> postOrderTraversal(TreeNode root){
List<Integer> nodes = new LinkedList<>();
Deque<TreeNode> stack = new ArrayDeque<>();
TreeNode cur = root, prev = null;
while(cur != null || !stack.isEmpty()){
while(cur != null){
stack.push(cur);
cur = cur.left;
}
cur = stack.peek();
if(cur.right != null && cur.right != prev){
cur = cur.right;
}else{
stack.pop();
nodes.add(cur.val);
prev = cur;
cur = null;
}
}
return nodes;
}
posted @   叶拂衣  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示