代码随想录算法训练营第13天 | 复习二叉树基础

hailicy / 2024-07-16 / 原文

2024年7月15日

二叉树
前序遍历,前就是指根在前,递归要注意判断节点为空。
如果不用递归,就用一个栈来保存节点。

/**
 * 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<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        return first(root,list);
    }

    public List<Integer> first(TreeNode root, List<Integer> list){
        if(root==null){
            return list;
        }
        list.add(root.val);
        if(root.left!=null){
            list = first(root.left,list);
        }
        if(root.right!=null){
            list = first(root.right,list);
        }
        return list;
    }
}

后序,就是根最后。

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        return back(root,list);
    }

    public List<Integer> back(TreeNode root, List<Integer> list){
        if(root==null){
            return list;
        }
        if(root.left!=null){
            list = back(root.left,list);
        }
        if(root.right!=null){
            list = back(root.right,list);
        }
        list.add(root.val);
        return list;
    }
}

中序,就是根节点在中间。

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        return med(root,list);
    }

    public List<Integer> med(TreeNode root, List<Integer> list){
        if(root==null){
            return list;
        }
        
        if(root.left!=null){
            list = med(root.left,list);
        }
        list.add(root.val);
        if(root.right!=null){
            list = med(root.right,list);
        }
        return list;
    }
}