前序遍歷
/**
* 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> preorderTraversal(TreeNode root) {
TreeNode cur=root;
Stack<TreeNode> stack=new Stack<>();
List<Integer> result=new ArrayList<>();
while(!stack.isEmpty()||cur!=null)
{
while(cur!=null)
{
result.add(cur.val);
stack.push(cur);
cur=cur.left;
}
//取出一個進行回溯
cur=stack.pop();
cur=cur.right;
}
return result;
}
}
中序遍歷
/**
* 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) {
TreeNode cur=root;
Stack<TreeNode> stack=new Stack<>();
List<Integer> result=new ArrayList<>();
while(!stack.isEmpty()||cur!=null)
{
while(cur!=null)
{
stack.push(cur);
cur=cur.left;
}
cur=stack.pop();
//從棧中取出一個對右進行回溯
result.add(cur.val);
cur=cur.right;
}
return result;
}
}
後序遍歷:
/**
* 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> postorderTraversal(TreeNode root) {
TreeNode cur=root;
TreeNode last=null;
Stack<TreeNode> stack=new Stack<>();
List<Integer> result=new ArrayList<>();
while(!stack.isEmpty()||cur!=null)
{
while(cur!=null)
{
stack.push(cur);
cur=cur.left;
}
TreeNode top=stack.peek();
if(top.right==null||top.right==last)
{
result.add(top.val);
stack.pop();
last=top;
}else
{
cur=top.right;
}
}
return result;
}
}