0
点赞
收藏
分享

微信扫一扫

树之深度优先遍历算法详解(DFS实现) LeetCode94


       本文以如下树结构为例

树之深度优先遍历算法详解(DFS实现) LeetCode94_算法


深度优先(Deep First Search)

       树的孩子称作子树,对于一个树进行深度优先遍历,即将其某一子树下所有节点遍历完再去遍历其他子树。遍历的顺序以根为参照可分为先序遍历,中序遍历,后序遍历。

遍历方式

描述

先序遍历

根左右

中序遍历

左根右

后序遍历

左右根


遍历顺序详解

       先序遍历是按照根左右来遍历的,上述例子遍历过程为
0 (1 3 4)2 ->0 1 3 4 2

树之深度优先遍历算法详解(DFS实现) LeetCode94_dfs_02

代码(JAVA)

       先定义一个树结构。

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

       先序遍历DFS实现,将遍历结果按照先序遍历顺序放入一个List集合。

public static List<Integer> dfs(TreeNode node){
		//存放遍历结果
        List<Integer> result = new ArrayList<>();
        if (node == null){
            return null;
        }else{
        	//先放入根节点
            result.add(node.val);
        }
        TreeNode left = node.left;
        TreeNode right = node.right;
        //左子树
        if (left!=null){
            result.addAll(dfs(left));
        }
        //右子树
        if (right!=null){
            result.addAll(dfs(right));
        }
        return result;
    }

       测试,先定义一个上图例子中的树,然后进行先序遍历。

public static void main(String[] args) {
	//定义例子中的树
    TreeNode root = new TreeNode(0);
    root.left = new TreeNode(1);
    root.right = new TreeNode(2);
    root.left.left = new TreeNode(3);
    root.left.right = new TreeNode(4);
    //先序遍历DFS
    List<Integer> dfs = dfs(root);
    System.err.println(dfs);
}

树之深度优先遍历算法详解(DFS实现) LeetCode94_深度优先DFS详解_03


       最后得出结果,和预想的一样。在树的算法中经常用到递归的思想,因为树的子树都是一个树,在实现过程中正确理解树对于实现很有帮助。


举一反三(LeetCode_94)

       题目:94. 二叉树的中序遍历,给定一个二叉树的根节点 root ,返回它的 中序 遍历

       上边先序代码稍加修改实现如下。

public List<Integer> inorderTraversal(TreeNode root) {
    List<Integer> result = new ArrayList();
    if(root==null){
        return result;
    }
    //中序遍历左根右
    TreeNode left = root.left;
    TreeNode right = root.right;
    if(left!=null){
        result.addAll(inorderTraversal(left));
    }
    result.add(root.val);
    if(right!=null){
        result.addAll(inorderTraversal(right));
    }
    return result;
}


举报

相关推荐

0 条评论