• 5 二叉树


    1 二叉树的遍历

    1.1 二叉树

    ①每个结点的度都不大于2

    ②每个结点的孩子结点次序不能任意颠倒。

     1 class TreeNode
     2 {
     3     int value;
     4     TreeNode left;
     5     TreeNode right;
     6     public TreeNode(int value)
     7     {
     8         this.value = value;
     9     }
    10 }
    定义

    1.2 宽度优先遍历(分层遍历)

    算法思想:

    1. 队列初始化,队尾插入根结点

    2. 若队列不为空,队头元素出队,访问

    3. 若其左子树或右子树不为空,入队

     1 public static void levelTraversal(TreeNode root)
     2 {
     3     if(root == null)
     4         return;
     5     LinkedList<TreeNode> queue = new LinkedList<TreeNode>();  /* 队列初始化 */
     6     queue.add(root);  /* 根结点入队 */
     7     while(!queue.isEmpty())
     8     {
     9         TreeNode current = queue.remove();
    10         System.out.print(current.value + " ");
    11         if(current.left != null)
    12             queue.add(current.left);
    13         if(current.right != null)
    14             queue.add(current.right);
    15     }
    16 }
    宽度优先遍历

    1.3 深度优先遍历(先序遍历)

    算法思想:

    1. 使用一个辅助栈,将根结点压入栈顶

    2. 若栈不为空,弹出栈顶元素,访问

    3. 将其不为空的右子树和左子树压入栈顶

     1 public static void preOrderTraversal(TreeNode root)
     2 {
     3     if(root == null)
     4         return;
     5     Stack<TreeNode> stack = new Stack<TreeNode>();  /* 辅助栈 */
     6     stack.push(root);
     7     while(!stack.isEmpty())
     8     {
     9         TreeNode current = stack.pop();  /* 栈顶元素出栈 */
    10         System.out.print(current.value + " ");
    11         if(current.right != null)
    12             stack.push(current.right);
    13         if(current.left != null)
    14             stack.push(current.left);
    15     }
    16 }
    深度优先遍历
  • 相关阅读:
    vsftpd文件服务参数汇总和虚拟用户使用
    MHA实现mysql高可用复制集群
    mysqldump备份与基于bin-log实现完全恢复
    MySQL的日志相关内容
    MySQL(mariadb)主从复制模式与复制过滤
    MySQL(mariadb)多实例应用与多实例主从复制
    DNS的主从,转发与负载功能
    Spring 自动代理
    Jquery Validate 使用记坑
    动态代理
  • 原文地址:https://www.cnblogs.com/sketeton/p/11686638.html
Copyright © 2020-2023  润新知