zoukankan      html  css  js  c++  java
  • 二叉树遍历学习笔记

    二叉树遍历

    二叉树定义

    二叉树定义代码

    class TreeNode
    {
        public int val;
        public TreeNode left;
        public TreeNode right;
        public TreeNode(int x) { val = x; }
    }
    

    普通前中后序遍历

    前序遍历代码

    //递归
    void PreorderTraversal(TreeNode root)
    {
        if (root != null)
        {
            Console.Write(root.val + " ");
            PreorderTraversal(root.left);
            PreorderTraversal(root.right);
        }
    }
    //迭代
    void PreorderTraversal(TreeNode root)
    {
        if (root == null)
        {
            return;
        }
        Stack<TreeNode> stack = new Stack<TreeNode>();
        stack.Push(root);
        while (stack.Count != 0)
        {
            TreeNode node = stack.Pop();
            Console.Write(node .val + " ");
            if (node.right != null)
            {
                stack.Push(node.right);
            }
            if (node.left != null)
            {
                stack.Push(node.left);
            }
        }
        return;
    }
    

    中序遍历代码

    //递归
    void MiddleTraversal(TreeNode root)
    {
        if (root != null)
        {
            MiddleTraversal(root.left);
            Console.Write(root.val + " ");
            MiddleTraversal(root.right);
        }
    }
    //迭代
    void InorderTraversal(TreeNode root)
    {
        if (root == null)
        {
            return;
        }
        Stack<TreeNode> stack = new Stack<TreeNode>();
        while (stack.Count == 0 || root != null)
        {
            while (root != null)
            {
                stack.Push(root);
                root = root.left;
            }
            root = stack.Pop();
            Console.Write(root.val + " ");
            root = root.right;
        }
        return;
    }
    

    后序遍历代码

    //递归
    void SubsequentTraversal(TreeNode root)
    {
        if (root != null)
        {
            SubsequentTraversal(root.left);
            SubsequentTraversal(root.right);
            Console.Write(root.val + " ");
        }
    }
    //迭代 -未处理结果,输出结果倒序一下即可
    public IList<int> PostorderTraversal(TreeNode root)
    {
        if (root == null)
        {
            return;
        }
        Stack<TreeNode> stack = new Stack<TreeNode>();
        stack.Push(root);
        while(stack.Count != 0)
        {
            TreeNode node = stack.Pop();
            Console.Write(root.val + " ");
            if(node.left != null)
            {
                stack.Push(node.left);
            }
    
            if (node.right != null)
            {
                stack.Push(node.right);
            }
        }
        return;
    }
    

    层次遍历

    BFS实现自上向下层次遍历

    IList<IList<int>> LevelOrderBottom(TreeNode root)
    {
        //存储最终结果
        IList<IList<int>> res = new List<IList<int>>();
        //创建队列
        Queue<TreeNode> queue = new Queue<TreeNode>();
    
        if(root != null)
        {
            queue.Enqueue(root);
        }
        
        while(queue.Count != 0)
        {
            //创建列表存储当前队列节点值
            IList<int> nodes = new List<int>();
            int queueCount = queue.Count;
            for(int i=0;i<queueCount;i++)
            {
                TreeNode node = queue.Dequeue();
                nodes.Add(node.val);
                if(node.left != null)
                {
                    queue.Enqueue(node.left);
                }
                 if(node.right != null)
                {
                    queue.Enqueue(node.right);
                }
            }
            res.Add(nodes);
        }
        return res;
    }
    

    自底向上只需要简单处理

    //自底向上,每次在最前面新增
    res.Insert(0,nodes);
    
  • 相关阅读:
    [POJ][3072][Robot]
    [HDU][4021][24 Puzzle]
    [POJ][1228][Grandpa's Estate]
    [POJ][3662][Telephone Lines]
    [HDU][4007][Dave]
    [POJ] [1264] [SCUD Busters]
    ASP.NET中的COOKIE
    分享至...(源码)
    php获取图片并输出
    VNC 服务器/本地复制粘贴实现命令
  • 原文地址:https://www.cnblogs.com/muphalem/p/13620997.html
Copyright © 2011-2022 走看看