点点关注不迷离,点击主页查看更多优质内容
目录
一、什么是树
树 是一种经常用到的数据结构,用来模拟具有树状结构性质的数据集合。
树里的每一个节点有一个值和一个包含所有子节点的列表。从图的观点来看,树也可视为一个拥有N 个节点和N-1 条边的一个有向无环图。
二叉树是一种更为典型的树状结构。如它名字所描述的那样,二叉树是每个节点最多有两个子树的树结构,通常子树被称作“左子树”和“右子树”。
二、二叉树的遍历
运用递归解决二叉树相关题目
1.前序遍历
前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。
2.中序遍历
中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。
class Solution {
List<Integer> list=new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if(root==null)return list;
if(root.left!=null)inorderTraversal(root.left);
list.add(root.val);
if(root.right!=null)inorderTraversal(root.right);
return list;
}
}
3.后序遍历
后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点。
class Solution {
List<Integer> list=new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if(root==null)return list;
if(root.left!=null) postorderTraversal(root.left);
if(root.right!=null) postorderTraversal(root.right);
list.add(root.val);
return list;
}
}
三、提高
1.层序遍历是逐层遍历树结构。
广度优先搜索是一种广泛运用在树或图这类数据结构中,遍历或搜索的算法。 该算法从一个根节点开始,首先访问节点本身。 然后遍历它的相邻节点,其次遍历它的二级邻节点、三级邻节点,以此类推。
当我们在树中进行广度优先搜索时,我们访问的节点的顺序是按照层序遍历顺序的。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root==null)return new ArrayList();
List<List<Integer>> list=new ArrayList<>();
Queue<TreeNode> que=new LinkedList<>();
que.add(root);
while(!que.isEmpty()){
int counts=que.size();
List<Integer> temp=new ArrayList<>();
for(int i=0;i<counts;i++){
TreeNode tree=que.poll();
temp.add(tree.val);
if(tree.left!=null)que.add(tree.left);
if(tree.right!=null)que.add(tree.right);
}
list.add(temp);
}
return list;
}
}
2.找出二叉树的最大深度
class Solution {
public int maxDepth(TreeNode root) {
if(root==null)return 0;
return Math.max(maxDepth(root.left)+1,maxDepth(root.right)+1);
}
}
3.判断二叉树是否为对称二叉树
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root==null)return false;
return istrue(root.left,root.right);
}
public boolean istrue(TreeNode left,TreeNode right){
if(left==null && right==null)return true;
if(left==null || right==null)return false;
return (left.val==right.val) && istrue(left.left,right.right) && istrue(left.right,right.left);
}
}
总结
树是一种经常用到的数据结构,用来模拟具有树状结构性质的数据集合。熟练掌握二叉树的遍历及二叉树的基本特点是学好二叉树的关键。