//递归实现
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<Integer>();
preorder(root,ans);
return ans;
}
public void preorder(TreeNode root,List<Integer> ans){
if(root==null)
return;
ans.add(root.val);
preorder(root.left,ans);
preorder(root.right,ans);
}
}
//迭代实现
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<>();
if(root==null)
return ans;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode tmp = stack.peek();
stack.pop();
ans.add(tmp.val);
if(tmp.right!=null)
stack.push(tmp.right);
if (tmp.left!=null)
stack.push(tmp.left);
}
return ans;
}
}
中序遍历
//递归实现
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<Integer>();
inorder(root,ans);
return ans;
}
public void inorder(TreeNode root,List<Integer> ans){
if(root==null)
return;
inorder(root.left,ans);
ans.add(root.val);
inorder(root.right,ans);
}
}
//迭代实现
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = root;
while(cur!=null||!stack.isEmpty()){
if(cur!=null){
stack.push(cur);
cur=cur.left;
}else {
cur=stack.peek();
ans.add(stack.pop().val);
cur=cur.right;
}
}
return ans;
}
后序遍历
//递归实现
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<Integer>();
postorder(root,ans);
return ans;
}
public void postorder(TreeNode root,List<Integer> ans){
if(root==null)
return;
postorder(root.left,ans);
postorder(root.right,ans);
ans.add(root.val);
}
}
//迭代实现
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<>();
if(root==null)
return ans;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode tmp = stack.peek();
stack.pop();
ans.add(tmp.val);
if(tmp.left!=null)
stack.push(tmp.left);
if (tmp.right!=null)
stack.push(tmp.right);
}
Collections.reverse(ans);
return ans;
}
}
层序遍历
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
if(root!=null)
queue.add(root);
while(!queue.isEmpty()){
List<Integer> tmp = new ArrayList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
tmp.add(node.val);
if (node.left!=null)
queue.add(node.left);
if (node.right!=null)
queue.add(node.right);
}
ans.add(tmp);
}
return ans;
}
}
二叉树遍历前序遍历//递归实现class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<Integer>(); preorder(root,ans); return ans; } public void preorder(TreeNode