JavaTree常用操作及相关leetcode算法题

Tree

树描述的是节点之间的父子关系
节点:树中的每一个元素
根节点:树中最上层的唯一的节点
叶子节点:没有孩子的节点
高度:从最底层算起,从0开始
深度:从最高层算起,从0开始
层:从最高层算起,从1开始

二叉树

普通二叉树:每个节点最多两个孩子
满二叉树:除了叶子节点,每个节点都是两个孩子,并且所有叶子节点都在一层。
完全二叉树:从根节点起,从上到下,从左到右,依次填满节点形成的二叉树
满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树

遍历

根据根节点的访问顺序分为前中后,左右子树都是依次遍历的。

前序遍历

根节点-左子树-右子树

中序遍历

左子树-根节点-右子树

后序遍历

左子树-右子树-根节点
在这里插入图片描述
前序遍历:A-B-D-E-C-F-G
中序遍历:D-B-E-A-F-C-G
后序遍历:D-E-B-F-G-C-A

树相关leetcode

树在工作中很少单独使用,leetcode会给出树的结构,因此不讨论树的常用操作。

No.144 二叉树的前序遍历

思路:创建一个集合存放树的节点,如果根节点不为空,将根节点的值加入集合,然后递归调用方法传入根节点的左子树,将返回的集合使用addAll方法加入集合,然后递归调用方法传入根节点的右子树,将返回的集合使用addAll方法加入集合,最后返回集合。

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        if(root != null) {
            result.add(root.val);
            result.addAll(preorderTraversal(root.left));
            result.addAll(preorderTraversal(root.right));
        }
        return result;
    }
}

No.94 二叉树的中序遍历

思路:创建一个集合存放树的节点,如果根节点不为空,递归调用方法传入根节点的左子树,将返回的集合使用addAll方法加入集合,然后将根节点的值加入集合,然后递归调用方法传入根节点的右子树,将返回的集合使用addAll方法加入集合,最后返回集合。

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        if(root != null) {
            result.addAll(inorderTraversal(root.left));
            result.add(root.val);
            result.addAll(inorderTraversal(root.right));
        }
        return result;
    }
}

No.145 二叉树的后序遍历

思路:创建一个集合存放树的节点,如果根节点不为空,递归调用方法传入根节点的左子树,将返回的集合使用addAll方法加入集合,然后递归调用方法传入根节点的右子树,将返回的集合使用addAll方法加入集合,然后将根节点的值加入集合,最后返回集合。

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        if(root != null) {
            result.addAll(postorderTraversal(root.left));
            result.addAll(postorderTraversal(root.right));
            result.add(root.val);
        }
        return result;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值