前端算法-二叉树翻转

简介: 前端算法-二叉树翻转

题目

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

输入: root = [4,2,7,1,3,6,9]
输出: [4,7,2,9,6,3,1]

思路一

我们可以使用递归进行实现,先判断当前形参root是否为null,如果是则直接返回null,否则就继续往下执行,我们在创建一个left变量和right变量,用于接受调用自身函数传值为root左节点和root右节点的返回值,然后我们将返回值重新赋值给形参root的左节点和形参root的右节点,最后返回root形参即可

/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var invertTree = function(root) {
    if (root == null) {
        return null
    }
    let left = invertTree(root.left)
    let right = invertTree(root.right)
    root.left = right
    root.right = left
    return root
};

思路二

我们这里可以使用到深度优先搜索,用栈的另一种写法的后序遍历来实现,我们把要处理的节点放入栈后然后放入一个空指针作为标记,如果出栈元素为空,则说明该节点是需要处理的节点,我们先创建一个st变量,他是一个空栈,然后再判断当前的root是否不等于null,如果不是则将root使用push方法添加到st栈中,然后使用循环进行变量,循环条件为当前的st变量的长度不为0,在循环中我们声明一个node变量用于存储栈顶的元素,然后判断node是否为null,如果不是null,就不是需要处理的节点,然后按照中子节点,右子节点,左子节点的顺序使用push方法添加到st栈中,如果为空则删除空节点,然后再删除需要处理的节点,在交换其左右子树,最后将形参root返回出去即可

var invertTree = function(root) {
    var st = [];
    if (root !== null) st.push(root);
    while (st.length !== 0) {
        var node = st[st.length - 1];
        if (node !== null) {
            st.pop();
            st.push(node);                        
            st.push(null);
            if (node.right) st.push(node.right); 
            if (node.left) st.push(node.left); 
        } else {
            st.pop();
            node = st.pop();
            var temp = node.left;
            node.left = node.right;
            node.right = temp;
        }
    } 
    return root;
}


目录
打赏
0
0
0
0
1
分享
相关文章
|
4月前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
105 10
 算法系列之数据结构-二叉树
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
223 64
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
211 3
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
115 5
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
561 5
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
188 5
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
356 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
97 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
155 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问