前序遍历代码
/**
* 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) {
//存放结果
List<Integer> result = new ArrayList<>();
//声明一个队列
Deque<Guide> path = new ArrayDeque<>();
//将根节点放到队首
path.addFirst(new Guide(0,root));
while(!path.isEmpty()){
//访问队列中的队首元素
Guide current = path.removeFirst();
//这里需要做判断,因为空节点也被放进了队列
if(current.treeNode==null){
continue;
}
//op= 1,说明是print该节点,遂将其放进结果容器中
if(current.op==1){
result.add(current.treeNode.val);
}else{
//访问该节点,于是将该节点的三个操作放到队列中 print 自己,visist 左孩子,visit右孩子
path.addFirst(new Guide(0,current.treeNode.right));
path.addFirst(new Guide(0,current.treeNode.left));
path.addFirst(new Guide(1,current.treeNode));
}
}
return result;
}
private class Guide{
//0 代表visit该节点,1 print 代表打印该节点
int op;
TreeNode treeNode;
public Guide(int op,TreeNode node){
this.op = op;
this.treeNode = node;
}
}
}
中序遍历代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<Integer> res = new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if (root == null) return res;
inorderTraversal(root.left);
res.add(root.val);
inorderTraversal(root.right);
return res;
}
}
后序遍历代码
/**
* 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> res = new ArrayList<Integer>();
public List<Integer> postorderTraversal(TreeNode root) {
if(root == null)
return res;
postorderTraversal(root.left);
postorderTraversal(root.right);
res.add(root.val);
return res;
}
}