zoukankan      html  css  js  c++  java
  • 7. 最近公共祖先

    题目:

    有一颗树,给定树中任意两个结点,计算出这两个结点的最近公共祖先(查看定义)。
    
    树结点的定义为(请不要在代码中再次定义该结构):
    
    C/C++
    struct TreeNode {
        TreeNode *parent;
    }
    Java
    public class TreeNode {
        public TreeNode parent;
    }
    树结点只包含父结点指针(父结点指针为null表示该结点为根结点),该题存在空间复杂度O(1),时间复杂度低于O(n)的简单算法。
    View Code

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace LCA
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
    
            public int GetHeight(TreeNode treeNode)
            {
                int height = 1;
                while (treeNode.parent!=null)
                {
                    height++;
                    treeNode = treeNode.parent;
                }
                return height;
            }
    
            public TreeNode GetLCA(TreeNode node1, TreeNode node2)
            {
                int height1 = GetHeight(node1);
                int height2 = GetHeight(node2);
                while (height1>height2)
                {
                    node1 = node1.parent;
                    height1--;
                }
                while (height1<height2)
                {
                    node2 = node2.parent;
                    height2--;
                }
                while (node1!=node2)
                {
                    node1 = node1.parent;
                    node2 = node2.parent;
                }
                return node1;
            }
    
        }
    
        
    
        public struct TreeNode
        {
            public TreeNode parent;
        }
    }
    View Code
  • 相关阅读:
    MVC梳理与总结
    《岛上书店》
    PIL简单图片处理(上)
    Day 3---快捷键
    Day 2---控制快捷键
    Day 1--快捷键
    每天学点Emacs
    swift写ios mvc的小demo
    hexo博客部署到github无法上传的问题
    Django Web开发【7】 投票与评论
  • 原文地址:https://www.cnblogs.com/Ligeance/p/3511608.html
Copyright © 2011-2022 走看看