07二叉树基础之前序、中序、后序、层次遍历

在编写二叉树的几种遍历方式的代码之前,我们需要了解二叉树的一些基本概念

  1. 什么叫做树的高度、深度以及层数:高度,节点到叶子节点的最长路径(边数);深度:根节点到这个节点所经历的边数的个数;层数:节点的深度+1
  2. 什么叫做完全二叉树:叶子节点都在最底下两层,最后一层节点都要靠左排列,并且除了最后一层,其它层的节点个数都要达到最大。
  3. 存储二叉树可以有哪几种方法?那种方法最常用?那种二叉树最适合用数组来存储?(1)可以用链表或者数组存储二叉树 (2)链表最常用(3)完全二叉树最适合用数组来存储,因为最节省数组空间

1. 二叉树的前序遍历

使用递归的方式实现,先访问根节点,再访问左子树,最后访问右子树

class Solution{
    public void preOrdert(Node root){
        if(root == null)
            return;
        System.out.print(root)   //访问根节点
        preOrder(root.left);  //访问左子树
        preOrder(root.right);//访问右子树
    };
}

 

2. 二叉树的中序遍历

使用递归的方式实现,先访问左子树,再访问根节点,再访问右子树

class Solution{
    public void preOrdert(Node root){
        if(root == null)
            return;
        preOrder(root.left);  //访问左子树
        System.Out.Print(root)   //访问根节点
        preOrder(root.right);//访问右子树
    };
}

3. 二叉树的后序遍历

使用递归的方式实现,先访问左子树,再访问右子树,最后访问根节点

class Solution{
    public void preOrdert(Node root){
        if(root == null)
            return;
        preOrder(root.left);  //访问左子树
        preOrder(root.right);//访问右子树
        System.Out.Print(root)   //访问根节点
    };
}

4. 二叉树的层次遍历(Leetcode102)

二叉树的层次遍历需要借用一个队列来实现,先将根节点入队,然后队列不空,取出队头元素,如果左孩子存在就将左孩子入队,否则什么也不做,右孩子同理。直到队列为空,则表示树的层次遍历结束。(树的层次遍历过程也是一个广度优先遍历算法)

/**
 * 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> levelOrder(TreeNode root) {
        List> list = new ArrayList>();  //存储最终的结果
        if(root == null){
            return list;
        }
        Queue queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            List level = new ArrayList<>();   //用来保存树的一层数据
            int currentQueueSize = queue.size();       //队列中现有元素计数
            for(int i=0; i

 

你可能感兴趣的:(二叉树,队列,链表,数据结构,算法)