📌  相关文章
📜  在二叉树中查找从根到给定节点的距离(1)

📅  最后修改于: 2023-12-03 15:37:39.870000             🧑  作者: Mango

在二叉树中查找从根到给定节点的距离

在二叉树中查找从根节点到给定节点的距离是二叉树常见的应用。这个问题看起来比较简单,但是需要用到基本的二叉树知识和算法。

问题描述

给定一个二叉树和一个节点,要求计算从根节点到该节点的距离。

解决方法

这个问题可以用递归算法来解决。我们假设要查找的节点为node,计算的结果为distance。从根节点开始逐层遍历二叉树,如果遍历到的节点为node,则返回距离为0,否则递归查找左右子树。如果左子树的距离为-1,说明节点不在左子树中,继续查找右子树。如果右子树的距离为-1,说明节点不在右子树中,继续查找左子树。如果都不是-1,说明节点在左右子树中都存在,返回两个距离之和。

代码如下:

public int findDistance(TreeNode root, TreeNode node) {
    if (root == null)
        return -1;
    if (root == node)
        return 0;
    int left = findDistance(root.left, node);
    int right = findDistance(root.right, node);
    if (left == -1 && right == -1)
        return -1;
    return (left == -1 ? right : left) + 1;
}

其中,TreeNode是二叉树的节点类。

性能分析

这个算法的时间复杂度是O(n),其中n是二叉树的节点数。这个算法的空间复杂度是O(h),其中h是二叉树的高度。在最坏情况下,h为n,算法的空间复杂度为O(n)。

总结

在二叉树中查找从根到给定节点的距离是一个常见的问题,使用递归算法可以很容易地解决。这个算法的时间复杂度为O(n),空间复杂度为O(h)。在实际应用中,我们需要根据具体情况选择合适的数据结构和算法来解决问题。