二叉树的深度优先遍历

来源:互联网 发布:java游戏地下城与勇士 编辑:程序博客网 时间:2024/06/16 08:29

二叉树的前序遍历——根 左 右

import java.util.ArrayList;class TreeNode {    public int val;    public TreeNode left, right;    public TreeNode(int val) {        this.val = val;        this.left = this.right = null;    }}/** * 二叉树的前序遍历——根 左 右  * */public class Solution {    public ArrayList<Integer> preorderTraversal(TreeNode root) {        ArrayList<Integer> results = new ArrayList<>();        if(root == null) return results;        // 添加根节点        results.add(root.val);        // 遍历左子树        results = preorderTraversalHelper(root.left, results);        // 遍历右子树        results = preorderTraversalHelper(root.right, results);        return results;    }    private ArrayList<Integer> preorderTraversalHelper(TreeNode root,             ArrayList<Integer> results) {        if(root == null) return results;        // 添加根节点        results.add(root.val);        // 遍历左子树        results = preorderTraversalHelper(root.left, results);        // 遍历右子树        results = preorderTraversalHelper(root.right, results);        return results;    }}

二叉树的中序遍历——左 根 右

import java.util.ArrayList;class TreeNode {    public int val;    public TreeNode left, right;    public TreeNode(int val) {        this.val = val;        this.left = this.right = null;    }}/** * 二叉树的中序遍历——左 根 右  * */public class Solution {    public ArrayList<Integer> inorderTraversal(TreeNode root) {        ArrayList<Integer> results = new ArrayList<>();        if(root == null) return results;        // 遍历左子树        results = inorderTraversalHelper(root.left, results);        // 添加根节点        results.add(root.val);        // 遍历右子树        results = inorderTraversalHelper(root.right, results);        return results;    }    private ArrayList<Integer> inorderTraversalHelper(TreeNode root,             ArrayList<Integer> results) {        if(root == null) return results;        // 遍历左子树        results = inorderTraversalHelper(root.left, results);        // 添加根节点        results.add(root.val);        // 遍历右子树        results = inorderTraversalHelper(root.right, results);        return results;    }}

二叉树的后序遍历——左 右 根

import java.util.ArrayList;class TreeNode {    public int val;    public TreeNode left, right;    public TreeNode(int val) {        this.val = val;        this.left = this.right = null;    }}/** * 二叉树的后序遍历——左 右 根 * */public class Solution {    public ArrayList<Integer> postorderTraversal(TreeNode root) {        ArrayList<Integer> results = new ArrayList<>();        if(root == null) return results;        // 遍历左子树        results = postorderTraversalHelper(root.left, results);        // 遍历右子树        results = postorderTraversalHelper(root.right, results);        // 添加根节点        results.add(root.val);        return results;    }    private ArrayList<Integer> postorderTraversalHelper(TreeNode root,             ArrayList<Integer> results) {        if(root == null) return results;        // 遍历左子树        results = postorderTraversalHelper(root.left, results);        // 遍历右子树        results = postorderTraversalHelper(root.right, results);        // 添加根节点        results.add(root.val);        return results;    }}
原创粉丝点击