栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode刷题——二叉树的锯齿形层序遍历#103#Medium

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode刷题——二叉树的锯齿形层序遍历#103#Medium

二叉树的锯齿形层序遍历的思路探讨与源码
     二叉树的锯齿形层序遍历的题目如下图,该题属于二叉树和搜索类型的题目,主要考察对于搜索方法的使用和二叉树本身特性的理解。本文的题目作者想到2种方法,分别是BFS广度优先搜索方法和DFS深度优先搜索方法,其中DFS深度优先搜索方法使用Java进行编写,而BFS广度优先搜索方法使用Python进行编写,当然这可能不是最优的解法,还希望各位大佬给出更快的算法。

    本人认为该题目可以使用DFS深度优先搜索方法解决,首先初始化参数,并且从树根开始进行遍,在深度优先搜索函数的内部可以先判断是否为空,如果是就返回。然后判断下标是否大于列表的大小,如果是就把一个新的列表加入到结果列表里面。然后判断下标是奇数还是偶数,并且再次用左子树和右子树去调用深度优先搜索函数。直达函数结束并且最终返回结果。那么按照这个思路我们的Java代码如下:

#喷火龙与水箭龟
class Solution {
    private List> resFinal = new ArrayList>();
    public List> zigzagLevelOrder(TreeNode root) {
        searchDFS(root, 0);
        return resFinal;
    }
    private void searchDFS(TreeNode flag, int index) {
        if(flag == null){
            return;
        }
        if(index >= resFinal.size()){
            resFinal.add(new ArrayList());
        } 
        if(index % 2 == 1){
            resFinal.get(index).add(0, flag.val);
        }
        else{
            resFinal.get(index).add(flag.val);
        }
        searchDFS(flag.left,index+1);
        searchDFS(flag.right,index+1);
    }
}


    显然,我们看到DFS深度优先搜索方法的效果不错,同时还可以使用BFS广度优先搜索方法。首先判断是否为空,如果是就直接返回结果,然后初始化列表和下标参数。开始遍历树,将每一层的结果取出并把当前值插入到结果里,同时判断左子树和右子树是否为空,如果非空就将它们插入到需要搜索的列表尾部。并且判断下标是否为偶数,如果是就需要将结果列表进行反转,然后把结果列表插入到最终的列表里,直到最终结束并返回最终的列表里的结果。所以按照这个思路就可以解决,下面是Python代码部分:

#喷火龙与水箭龟
class Solution:
    def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root:
            return []
        resFinal = []
        index = 0
        listRes = [root]
        while listRes:
            listArr = []
            for _ in range(len(listRes)):
                num = listRes.pop(0)
                listArr.append(num.val)
                if num.left:
                    listRes.append(num.left)
                if num.right:
                    listRes.append(num.right)
            if index % 2:
                listArr.reverse()
            resFinal.append(listArr)
            index = index + 1
        return resFinal


    从结果来说Java版本的DFS深度优先搜索方法的效率不错,同样的Python版本的BFS广度优先搜索方法的速度也还可以,但应该是有更多的方法可以进一步提速的,希望朋友们能够多多指教,非常感谢。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/657922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号