题解 | #实现二叉树先序,中序和后序遍历#

实现二叉树先序,中序和后序遍历

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;
    }
}
全部评论

相关推荐

想润的芹菜人狠话不多:把其中一个老总放中间都会得罪另一个
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务