91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c#二叉樹的最近公共祖先如何找

c#
小樊
81
2024-07-26 02:40:16
欄目: 編程語言

在C#中,我們可以通過遞歸的方法來找到二叉樹中兩個節點的最近公共祖先。具體步驟如下:

  1. 定義一個遞歸函數,該函數的作用是在以root為根節點的二叉樹中查找節點p和節點q的最近公共祖先。
  2. 如果root為null,表示當前節點為空,直接返回null。
  3. 如果root等于p或q,表示當前節點就是要查找的節點之一,直接返回當前節點。
  4. 遞歸查找root的左子樹和右子樹,分別得到left和right。
  5. 如果left和right均不為空,說明p和q分別位于root的左右子樹,那么root就是它們的最近公共祖先。
  6. 如果left為空而right不為空,說明p和q都在右子樹中,返回right。
  7. 如果left不為空而right為空,說明p和q都在左子樹中,返回left。
  8. 如果left和right均為空,說明p和q都不在root的子樹中,返回null。

下面是C#代碼實現:

public TreeNode LowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    if(root == null || root == p || root == q) {
        return root;
    }
    
    TreeNode left = LowestCommonAncestor(root.left, p, q);
    TreeNode right = LowestCommonAncestor(root.right, p, q);
    
    if(left != null && right != null) {
        return root;
    } else if(left != null) {
        return left;
    } else {
        return right;
    }
}

在代碼中,TreeNode表示二叉樹的節點,包含左右子樹和值等屬性。我們調用LowestCommonAncestor函數,傳入樹的根節點root以及要查找的兩個節點p和q,即可找到它們的最近公共祖先。

0
疏勒县| 新河县| 南漳县| 乌兰察布市| 镇平县| 平果县| 汝南县| 神农架林区| 马尔康县| 海阳市| 道孚县| 林州市| 景德镇市| 平定县| 色达县| 黄骅市| 武穴市| 嘉义县| 龙口市| 察雅县| 苍南县| 南雄市| 杂多县| 维西| 宁国市| 正阳县| 邵阳市| 富源县| 都匀市| 汉中市| 从化市| 三门峡市| 来宾市| 焦作市| 全椒县| 乐清市| 崇文区| 三穗县| 静安区| 府谷县| 文成县|