JAVA数据结构知识点,数据结构 树Tree 知识点总结 附Leetcode力扣练习题答案

先来明确下树的概念:明确的父子关系

正确的示例:

6f690630d0257c55f316eca23b0dfbcc.png

错误的示例:

eb88a51a6ad23a22d1bb483c88bb2a55.png

几个名词:

节点:线两端的点即节点

根节点:无父节点的节点

叶子节点:无子节点的节点

几个概念:

高度:从下到上,从0计数,根节点最高

深度:从上到下,从0计数,根节点为0

层:从上到下,从1计数,根节点为第一层

bb6d5eb0b51c59198b5904c85f3a3c27.png

特殊的树,二叉树,二叉树又分为普通二叉树、满二叉树,完全二叉树

普通二叉树:每个节点最多两个字节点。

满二叉树:除了叶子节点,每个节点都有左右两个子节点,所有叶子节点在同一层级。

完全二叉树:从根节点开始,从上到下,从左往右,依次填满节点形成的二叉树。

二叉树的遍历:

前序遍历:根节点->左子树->右子树

中序遍历:左子树->根节点->右子树

后续遍历:左子树->右子树->根节点

示例:

d19ce8d18ebf12b8de26f4d9121aa391.png

前序遍历:A->B->D->E->C->F->G

中序遍历:D->B->E->A->F->C->G

后续遍历:D->E->B->F->G->C->A

Leetcode练习题:

144题  二叉树前序遍历

class Solution {

public List preorderTraversal(TreeNode root) {

List resultList = new ArrayList<>();

if(root == null){

return resultList;

}

//将根节点的值加入返回列表

resultList.add(root.val);

//如果左子节点不为空,前序遍历左子节点

if(root.left!=null){

resultList.addAll(preorderTraversal(root.left));

}

//如果右子节点不为空,前序遍历右子节点

if(root.right!=null){

resultList.addAll(preorderTraversal(root.right));

}

return resultList;

}

}

94题 二叉树中序遍历

class Solution {

public List inorderTraversal(TreeNode root) {

List resultList = new ArrayList<>();

if(root == null){

return resultList;

}

//如果左子节点不为空,中序遍历左子节点

if(root.left!=null){

resultList.addAll(inorderTraversal(root.left));

}

//将根节点的值加入返回列表

resultList.add(root.val);

//如果右子节点不为空,中序遍历右子节点

if(root.right!=null){

resultList.addAll(inorderTraversal(root.right));

}

return resultList;

}

}

145题 二叉树后序遍历

class Solution {

public List postorderTraversal(TreeNode root) {

List resultList = new ArrayList<>();

if(root == null){

return resultList;

}

//如果左子节点不为空,后序遍历左子节点

if(root.left!=null){

resultList.addAll(postorderTraversal(root.left));

}

//如果右子节点不为空,后序遍历右子节点

if(root.right!=null){

resultList.addAll(postorderTraversal(root.right));

}

//将根节点的值加入返回列表

resultList.add(root.val);

return resultList;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值