问题描述:
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree [1,null,2,3]
,
1 \ 2 / 3
return [1,3,2]
.
Note: Recursive solution is trivial, could you do it iteratively?
原问题链接:https://leetcode.com/problems/binary-tree-inorder-traversal/
问题分析
这个问题属于一个比较典型的算法运用。在之前的文章里针对递归和非递归的过程都有过详细的讨论。这里中序遍历只是其中的一种情况。我们可以运用递归的方法和非递归的方法两种方式来解决。
递归解法
这种方式非常简单,每次遍历一个节点的时候都是首先遍历它的左子节点,然后再遍历该节点,再接着遍历它的右子节点。按照这个递归关系,我们将保存最终结果的列表作为参数传入递归调用的函数中。每次在遍历处理具体元素的时候将元素加入到列表中就可以了。
详细的代码实现如下:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); inorder(list, root); return list; } private void inorder(List<Integer> list, TreeNode root) { if(root == null) return; if(root.left != null) { inorder(list, root.left); } list.add(root.val); if(root.right != null) { inorder(list, root.right); } } }
非递归解法
这种解法的思路也好理解。因为从递归的定义来说,每次碰到一个节点的时候都会优先的去看它的左子节点,所以从每碰到一个节点的时候我们就一直沿着这个节点的左子节点往前遍历。在遍历的过程中将碰到的节点都压入到栈中间。一直到该节点的左子节点已经是null了。
这个时候我们从栈顶弹出这个元素来,因为它肯定就是我们要找的最左下的元素。访问了这个元素之后,我们将遍历的节点再指向当前访问元素的右子节点。这样就可以遍历完整个二叉树了。
详细的代码实现如下:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<>(); while(root != null || !stack.isEmpty()) { while(root != null) { stack.push(root); root = root.left; } if(!stack.isEmpty()) { root = stack.pop(); list.add(root.val); root = root.right; } } return list; } }
相关推荐
94.Binary_Tree_Inorder_Traversal二叉树的中序遍历【LeetCode单题讲解系列】
python python_leetcode题解之094_Binary_Tree_Inorder_Traversal
c语言基础 c语言_leetcode题解之0094_binary_tree_inorder_traversal.zip
javascript js_leetcode题解之94-binary-tree-inorder-traversal.js
我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的...102. Binary Tree Leve
105.construct_binary_tree_from_preorder_and_inorder_traversal从前序
leetcode 530 力扣在线评委 # 问题 困难 解决方案 1 简单的 2 中等的 3 中等的 12 中等的 22 中等的 ...Binary Tree ...Traversal ...Binary Tree Inorder Traversal 318. Maximum Product of Word Length
Inorder Traversal 栈 递归 Single Number 异或 Copy List with Random Pointer 单链表 map Max Points on a Line 斜率 map, int> Fraction to Recurring Decimal map long long 正负号 Repeated DNA S
leetcode中文版车鸟 一组用python编写的算法。 种类 冒泡排序 插入排序 归并排序 桶排序 ...binary_tree_inorder_traversal binary_tree_level_order_traversal binary_tree_level_order_traversal_I
144-Binary Tree Preorder Traversal94-Binary Tree Inorder Traversal145-Binary Tree Postorder Traversal(后续的非递归时间不够可以先跳过,有点难)层次遍历,队列辅助,相当于广搜。102-Binary Tree Level ...
例如,"Binary Tree Inorder Traversal" (题号 94) 需要按照中序遍历顺序打印二叉树的节点。 6. **图**:图的遍历、最短路径等问题。例如,"Course Schedule" (题号 207) 要求找出是否存在完成所有课程的顺序。 7....
而"Binary Tree Inorder Traversal"则可以使用递归或栈来实现。 除了算法和数据结构,LeetCode还涉及了系统设计和开源实践。标签中的"系统开源"提示我们,LeetCode的部分问题会涉及到系统架构和开源技术的运用。...
105从Preorder和Inorder Traversal.js构造二叉树 106从有序和后置Traversal.js构造二叉树 107二叉树级订单遍历II.js 108将排序后的数组转换为Binary Search Tree.js 大多数Water.js的11个容器 110平衡Binary Tree....
例如“二叉树的层次遍历”(Level Order Traversal),可以使用广度优先搜索(BFS)解决。 6. **图**:由顶点和边构成的数据结构,用于表示对象之间的关系。在LeetCode中,图问题可能涉及到最短路径、遍历等。例如...
java lru leetcode Leetcode Just want to push myself to ...里面并没有列出所有的题目的解法,只列出一些比较经典的 ...Inorder traversal + two pointers Time: O(n), Space: O(n) 3. BST iterator + stack Time: O(n),
leetcode 2 和 c Leetcode_questions 目前拥有: 简单的: ...Traversal(c++:tree traversal inorder) 100.Same Tree(c++) 101.对称树(c++) 104.二叉树的最大深度(c++) 108.将排序数组转换为二叉搜索树
前中后序(In-Order/Pre-Order/Post-Order) Breadth-first/Depth-first search 广度优先、深度优先 Divide and Conquer 分而治之 Dynamic Programming 动态规划 Binary Search 二分法查询 Graph 图 解题思路 明确...
Inorder Traversal 对于树的问题,大多数我们都会使用递归的方法。原因是树的左子树也是树,右子树也是树,使用递归的方法最简单快捷。这道题是需要我们用Inorder的顺序输出节点。inorder的顺序是先左再自己再右。...
- **Binary Tree Depth Order Traversal**:二叉树的深度优先遍历。 - **Populating Next Right Pointers in Each Node**:连接二叉树每个节点的下一个右侧节点。 - **Convert Sorted List/Array to Binary ...