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

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

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

相关推荐

10-17 23:18
已编辑
西北农林科技大学 Web前端
独行m:给25可以试试,但他只能给12,那就是纯纯的事精
秋招,不懂就问
点赞 评论 收藏
分享
阿武同学:基本信息保留前面三行,其他的可以全部删掉,邮箱最重要的你没写,主修课程精简到8个以内,实习里面2/3/4都是水内容的,非要写的话建议两到三句话,项目经历排版优化下,自我评价缩到三行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务