二叉树层序遍历
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:给定的二叉树是{3,9,20,#,#,15,7}
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
if(null == root){
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
ArrayList<Integer> temp = new ArrayList<>();
for(int i = queue.size(); i>0 ;i--){
TreeNode node = queue.poll();
temp.add(node.val);
if(null != node.left){
queue.add(node.left);
}
if(null != node.right){
queue.add(node.right);
}
}
result.add(temp);
}
return result;
}
二叉树的先序、中序、后序
递归实现(简单):
public class Solution {
// 先序
List<Integer> flist = new ArrayList<>();
// 中序
List<Integer> mlist = new ArrayList<>();
// 后序
List<Integer> llist = new ArrayList<>();
// 先序
public void forder(TreeNode root){
if(null != root){
flist.add(root.val);
forder(root.left);
forder(root.right);
}
}
// 中序
public void morder(TreeNode root){
if(null != root){
morder(root.left);
mlist.add(root.val);
morder(root.right);
}
}
// 后序
public void lorder(TreeNode root){
if(null != root){
lorder(root.left);
lorder(root.right);
llist.add(root.val);
}
}
}
非递归实现: