中序遍历
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new LinkedList<>();
TreeNode cur = root;
while(cur != null){
if(cur.left != null){
TreeNode pre = cur.left;
while(pre.right != null && pre.right != cur){
pre = pre.right;
}
if(pre.right == cur){
pre.right = null;
res.add(cur.val);
cur = cur.right;
}else{
pre.right = cur;
cur = cur.left;
}
}else{
res.add(cur.val);
cur = cur.right;
}
}
return res;
}
先序遍历
public List<Integer> preorderTraversal(TreeNode root) {
LinkedList<Integer> res = new LinkedList<>();
TreeNode cur = root;
while(cur != null){
if(cur.left != null){
TreeNode pre = cur.left;
while(pre.right != null && pre.right != cur){
pre = pre.right;
}
if(pre.right == cur){
pre.right = null;
cur = cur.right;
}else{
pre.right = cur;
res.add(cur.val);
cur = cur.left;
}
}else{
res.add(cur.val);
cur = cur.right;
}
}
return res;
}
后序遍历
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
TreeNode cur = root;
while(cur != null){
if(cur.right != null){
TreeNode next = cur.right;
while(next.left != null && next.left != cur){
next = next.left;
}
if(next.left == cur){
next.left = null;
cur = cur.left;
}else{
res.add(cur.val);
next.left = cur;
cur = cur.right;
}
}else{
res.add(cur.val);
cur = cur.left;
}
}
Collections.reverse(res);
return res;
}