Leetcode——94二叉树的中序遍历、102二叉树的层次遍历
程序员文章站
2022-05-20 11:21:31
...
94.给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
【思路1】
这里使用递归的方法来进行遍历,这里是中序遍历。
【实现代码】
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private List<Integer> ls=new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if(root!=null){
inorderTraversal(root.left);
ls.add(root.val);
inorderTraversal(root.right);
}
return ls;
}
}
【思路2】
使用非递归的方法,想到了用栈这种结构来实现。来实现中序遍历。
【实现代码】
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ls=new ArrayList<>();
Stack<TreeNode> s=new Stack<>();
TreeNode cur=root;
while(cur!=null || !s.isEmpty()){
while(cur!=null){
s.push(cur);
cur=cur.left;
}
cur=s.pop();
ls.add(cur.val);
cur=cur.right;
}
return ls;
}
}
102.给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
输出: [1,3,2]
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
【思路1】
层次遍历可以用队列的结构来实现,拿到这种关于树遍历的题,可以先思考用那种数据结构可以实现。因为队列是先进先出,符合层次遍历的过程。把子节点往后排然后再出队。
【实现代码】
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> q=new LinkedList<TreeNode>();
List<List<Integer>> res=new ArrayList<>();
if(root==null) return res;
q.add(root);
while(!q.isEmpty()){
int count=q.size();
//System.out.println(count);
List<Integer> ls=new ArrayList<Integer>();
while(count>0){
TreeNode cur=q.poll();
ls.add(cur.val);
if(cur.left!=null)
q.add(cur.left);
if(cur.right!=null)
q.add(cur.right);
count--;
}
res.add(ls);
//System.out.println(!q.isEmpty());
}
return res;
}
}
【注意点】
因为要把层次遍历的结果保存链表中去,所以这个时候保存的时候需要记录队列中节点的个数,然后输出进行左右子树的判断。
上一篇: leetcode 655 输出二叉树
下一篇: 113. 路径总和 II
推荐阅读
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
Python实现二叉树前序、中序、后序及层次遍历示例代码
-
Python利用前序和中序遍历结果重建二叉树的方法
-
C语言实现线索二叉树的前中后创建和遍历详解
-
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
-
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
-
[PHP] 算法-根据前序和中序遍历结果重建二叉树的PHP实现
-
Python实现二叉树前序、中序、后序及层次遍历示例代码
-
数据结构算法(二叉树的锯齿形层次遍历)