二叉树的遍历是根据访问结点操作发生位置命名:
前序:访问根结点的操作发生在遍历其左右子树之前。
中序:访问根结点的操作发生在遍历其左右子树之中。
后序:访问根结点的操作发生在遍历其左右子树之后。
二叉树节点定义:
//Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
前序遍历:
public void preOrder(TreeNode node){
if(node == null){
return;
}
System.out.println(node.val);
preOrder(node.left);
preOrder(node.right);
}
中序遍历:
public void inOrder(TreeNode node){
if(node == null){
return;
}
inOrder(node.left);
System.out.println(node.val);
inOrder(node.right);
}
后序遍历:
public void postOrder(TreeNode node){
if(node == null){
return;
}
postOrder(node.left);
postOrder(node.right);
System.out.println(node.val);
}
解答LeetCode144、94、145题,只需要在上面的遍历模板上稍作修改就可。
144. Binary Tree Preorder Traversal
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ret =new ArrayList<Integer>();
preOrder(root,ret);
return ret;
}
public void preOrder(TreeNode node,List<Integer> ret){
if(node == null){
return ;
}
ret.add(node.val);
preOrder(node.left,ret);
preOrder(node.right,ret);
}
}
94. Binary Tree Inorder Traversal
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> ret = new ArrayList<Integer>();
inOrder(root,ret);
return ret;
}
public void inOrder(TreeNode node,List<Integer> ret){
if(node == null){
return ;
}
inOrder(node.left,ret);
ret.add(node.val);
inOrder(node.right,ret);
}
}
145. Binary Tree Postorder Traversal
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> ret =new ArrayList<Integer>();
postOrder(root,ret);
return ret;
}
public void postOrder(TreeNode node,List<Integer> ret){
if(node == null){
return ;
}
postOrder(node.left,ret);
postOrder(node.right,ret);
ret.add(node.val);
}
}