算法训练营Day14(二叉树)

理论基础

这里的话,学的也不少,就是注意一下java中容器的支持吧,hashMap这里,jdk8以后是hash表

数组+链表转红黑树的方式,这里的话采用的红黑树是完全二叉树的一种

另外优先级队列PriorityQueue是一个二叉堆,也是完全二叉树的一种。

二叉树的遍历方式:广度优先:层序遍历

深度优先:前中后

另外还有递归遍历非递归遍历(叫做 迭代法)【因为递归的本质也是栈

TreeMap这里好就是单纯的二叉树,红黑树,不涉及哈希表

可以看下这篇文章

http://t.csdnimg.cn/Nq3ZY

递归遍历

递归

递归需要注意的地方:

1、参数和返回值

        可动态调整~

        二叉树一般是(根节点,数组)

2、结束条件

        二叉树终止条件是指针为null的时候

3、确认递归的逻辑

        处理的逻辑就是,往数组放元素。

前序遍历

144. 二叉树的前序遍历 - 力扣(LeetCode)

class Solution {
    public List preorderTraversal(TreeNode root) {
        List res = new ArrayList<>();
        preorder(root,res);
        return res;
    }
    private void preorder(TreeNode root,List result){
        if(root==null){
            return;
        }
        result.add(root.val);
        preorder(root.left,result);
        preorder(root.right,result);
    }
}

中序遍历

public List inorderTraversal(TreeNode root) {
        List res = new ArrayList<>();
        inorder(root,res);
        return res;
    }
    private void inorder(TreeNode root,List result){
        if(root==null){
            return;
        }
        inorder(root.left,result);
        result.add(root.val);
        inorder(root.right,result);
    }

后序遍历

145. 二叉树的后序遍历 - 力扣(LeetCode)

class Solution {
    public List postorderTraversal(TreeNode root) {
        List res = new ArrayList<>();
        preorder(root,res);
        return res;
    }
    private void preorder(TreeNode root,List result){
        if(root==null){
            return;
        }
        preorder(root.left,result);
        preorder(root.right,result);
        result.add(root.val);
    }
}

日后补充(我基础不好~hh)

迭代遍历 (基础不好的录友,迭代法可以放过)

题目链接/文章讲解/视频讲解:代码随想录

 统一迭代   (基础不好的录友,迭代法可以放过)

这是统一迭代法的写法, 如果学有余力,可以掌握一下

题目链接/文章讲解:代码随想录

你可能感兴趣的:(算法,哈希算法)