题解 | #实现二叉树先序,中序和后序遍历#
实现二叉树先序,中序和后序遍历
http://www.nowcoder.com/practice/a9fec6c46a684ad5a3abd4e365a9d362
dfs遍历
前序遍历:输出当前节点 递归处理左子节点 递归处理右子节点
中序遍历:递归处理左子节点 输出当前节点 递归处理右子节点
后序遍历:递归处理左子节点 递归处理右子节点 输出当前节点
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
int idx = 0;
public int[][] threeOrders (TreeNode root) {
if(root == null)return new int[][]{{},{},{}};
int n = getLen(root);
int ret[][] = new int[3][n];
dfs1(root,ret[0]);
idx = 0;
dfs2(root,ret[1]);
idx = 0;
dfs3(root,ret[2]);
return ret;
}
public void dfs1(TreeNode node,int arr[]){
//直接记录当前节点
arr[idx++] = node.val;
if(node.left != null){
dfs1(node.left,arr);
}
if(node.right != null){
dfs1(node.right,arr);
}
}
public void dfs2(TreeNode node,int arr[]){
if(node.left != null){
dfs2(node.left,arr);
}
//左子节点处理完,在记录当前节点
arr[idx++] = node.val;
if(node.right != null){
dfs2(node.right,arr);
}
}
public void dfs3(TreeNode node,int arr[]){
if(node.left != null){
dfs3(node.left,arr);
}
if(node.right != null){
dfs3(node.right,arr);
}
//左右节点都处理完,在记录当前节点
arr[idx++] = node.val;
}
public int getLen(TreeNode t){
int sum = 1;
if(t.left != null){
sum += getLen(t.left);
}
if(t.right != null){
sum += getLen(t.right);
}
return sum;
}
}