美文网首页应届生互联网求职面试总结分享
二叉树的中序遍历(递归和非递归版本)

二叉树的中序遍历(递归和非递归版本)

作者: 大菜鸟_ | 来源:发表于2018-10-27 16:27 被阅读0次

    难易程度:★★

    重要性:★★★★★

    树结构是面试中的考察的重点,而树的遍历又是树结构的基础。中序遍历的非递归版本要求重点理解掌握。

    /**
         * 非递归版本的中序遍历
         * node指向待处理的节点,在中序遍历中如果要输出一个节点,要么该节点没有左孩子,要么该节点的左子树已经全部输出了。
         *所以:
         *1.当node为null时,表示暂时没有新节点处理,此时出栈一个节点(表明该节点没有左子树或者左子树全部处理了);
         *    这时只需要继续处理右子树即可, 中序是“左根右”:我们先入栈 根节点 ,如果有左节点则入栈左节点,
         *    否则出栈根节点(没有左节点则输出遍历根节点),之后处理右子树
         *2.当node不为null时,将node入栈,并将node指向node.left,表明要处理当前节点必须先处理左子树节点
         * 
         * @param root:根节点
         */
        public static List<Integer> midOrderTraverse(TreeNode root) {
            LinkedList<Integer> res = new LinkedList<Integer>();
    
            if (root == null)
                return res;
    
            Stack<TreeNode> aux = new Stack<TreeNode>();
            TreeNode node = root;//node指向待处理节点
    
            while (node != null || !aux.isEmpty()) {
                while (node != null) {
                  //当前节点不为null,将当前节点入栈等到该节点的左子树全部处理完后在处理当前节点
                    aux.add(node);
                    node = node.left;//先处理左孩子节点
                }
                TreeNode temp = aux.pop();
                res.add(temp.val);//node没有左孩子,则输出当前node节点
                node = temp.right;//处理node的右子树
            }
            return res;
        }
        
        /**
         * 中序遍历,递归版本
         * @param root
         * @return
         */
        public static ArrayList<Integer> midOrderTraverse(TreeNode root) {
            ArrayList<Integer> res = new ArrayList<Integer>();
    
            midOrderTraverse(root, res);
            return res;
        }
    
        private static void midOrderTraverse(TreeNode root, ArrayList<Integer> res) {
            if (root == null)
                return;
    
            preOrder(root.left);
            res.add(root.val);
            preOrder(root.right);
        }
    

    扫描下方二维码,及时获取更多互联网求职面经javapython爬虫大数据等技术,和海量资料分享
    公众号菜鸟名企梦后台发送“csdn”即可免费领取【csdn】和【百度文库】下载服务;
    公众号菜鸟名企梦后台发送“资料”:即可领取5T精品学习资料java面试考点java面经总结,以及几十个java、大数据项目资料很全,你想找的几乎都有

    扫码关注,及时获取更多精彩内容。(博主今日头条大数据工程师)

    相关文章

      网友评论

        本文标题:二叉树的中序遍历(递归和非递归版本)

        本文链接:https://www.haomeiwen.com/subject/ejpdtqtx.html