算法通关村第七关-青铜挑战二叉树的深度优先遍历(递归)

二叉树的深度优先遍历

今天我们来说二叉树的深度优先遍历 , 这次用简单但有点难理解的方式递归来实现 , 对应LeetCode 144,145

二叉树的前序遍历

描述 :

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

题目 :

LeetCode 二叉树的前序遍历 :

144. 二叉树的前序遍历

算法通关村第七关-青铜挑战二叉树的深度优先遍历(递归)_第1张图片

分析 :

算法通关村第七关-青铜挑战二叉树的深度优先遍历(递归)_第2张图片

我们先选一个最小的子树:

算法通关村第七关-青铜挑战二叉树的深度优先遍历(递归)_第3张图片

先判断5节点不是null之后把5添加到集合里 , 再把5的左节点递归 , 判断7节点不是null把7添加到集合中 再把7节点的左节点递归 判断是null返回 再把7的右节点递归判断为null返回 , 之后把5的右节点递归 判断之后把8添加到集合中 依次类推......
 

解析 :

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List preorderTraversal(TreeNode root) {
        List list = new ArrayList<>();
        nodeVal(root,list);
        return list;
    }
    public void nodeVal(TreeNode node,List list){
        if(node == null){
            return;
        }
        list.add(node.val);
        nodeVal(node.left,list);
        nodeVal(node.right,list);
    }

}

二叉树的中序遍历

描述 :

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

题目 :

LeetCode 94.二叉树的中序遍历 :

94. 二叉树的中序遍历

算法通关村第七关-青铜挑战二叉树的深度优先遍历(递归)_第4张图片

分析 :

解析 :

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List inorderTraversal(TreeNode root) {
        List list = new ArrayList<>();
        nodeValue(root,list);
        return list;
    }
    public void nodeValue(TreeNode root,List list){
        if(root == null){
            return;
        }
        nodeValue(root.left,list);
        list.add(root.val);
        nodeValue(root.right,list);
    }
}

二叉树的后序遍历

描述 :

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 

题目 :

LeetCode 145.二叉树的后序遍历 :

145. 二叉树的后序遍历

算法通关村第七关-青铜挑战二叉树的深度优先遍历(递归)_第5张图片

分析 :

后序遍历伙伴们自己画一下 , 理解理解递归思想.......

解析 :

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List postorderTraversal(TreeNode root) {
        List list = new ArrayList<>();
        nodeValue(root,list);
        return list;
    }
    public void nodeValue(TreeNode root,List list){
        if(root == null){
            return;
        }
        nodeValue(root.left,list);
        nodeValue(root.right,list);
        list.add(root.val);
    }
}

这期就到这里 , 下期见!

你可能感兴趣的:(算法村,数据结构,算法)