zoukankan      html  css  js  c++  java
  • 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)

    一、前序遍历

        ArrayList<Integer> res = new ArrayList();
        public void preOrderTraverse1(TreeNode root) {
            if (root != null) {
             // System.out.print(root.val+"  ");
                res.add(root.val);
                preOrderTraverse1(root.left);
                preOrderTraverse1(root.right);
            }
        }

    二:中序遍历

        ArrayList<Integer> res = new ArrayList();
        public void inorder(TreeNode root) {
            if (root == null) {
                return;
            }
            inorder(root.left);
            res.add(root.val);
            inorder(root.right);
        }

    三:后续遍历

        ArrayList<Integer> res = new ArrayList();
        public  void postorderTraversal(TreeNode root)
        {
            if (root == null) {
                return;
            }
            postorderTraversal(root.left);    
            postorderTraversal(root.right);
            res.add(root.val);
        }

    四、层次遍历:

    层次遍历的代码比較简单。仅仅须要一个队列就可以。先在队列中增加根结点。之后对于随意一个结点来说。在其出队列的时候,訪问之。同一时候假设左孩子和右孩子有不为空的。入队列。代码例如以下:

        ArrayList<Integer> res = new ArrayList();
        public void levelTraverse(TreeNode root) {
            if (root == null) {
                return;
            }
            LinkedList<TreeNode> queue = new LinkedList<>();
            queue.offer(root);
            res.add(root.val);
            while (!queue.isEmpty()) {
                TreeNode node = queue.poll();
                //System.out.print(node.val+"  ");
                res.add(node.val);
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
        }

    五、深度优先遍历

    事实上深度遍历就是上面的前序、中序和后序。可是为了保证与广度优先遍历相照顾,也写在这。代码也比較好理解,事实上就是前序遍历,代码例如以下:

  • 相关阅读:
    asp.net图片上传代码
    C#(同步调用、异步调用、异步回调)
    跨线程的控件调用
    C# ListView用法详解 很完整
    获取dataGridView双击时判断双击的是下面的行,还是列头
    加密解密类
    C# 中DataGridView 绑定List<T>做数据源的操作问题
    C#获取当前程序集的完整路径
    接口测试-小结
    接口测试用例
  • 原文地址:https://www.cnblogs.com/kpwong/p/14689123.html
Copyright © 2011-2022 走看看