2016校招真题-小米Git(找最近双亲)

这里写图片描述

问题:找最近双亲问题 思想:找到indexA到0(根节点)的路径如:4->5->2->0 ; 再找到indexB到0(根节点)的路径如:1->2->0;找到两个路径后,从后往前,找到第一个两个路径不同的结点5与1,那么后一个结点2就是最近分割点。(其中:找路径用递归来解决,用一个visited数组记录结点是否被访问过,结束条件是:这个结点为0(根节点);)

class Solution {
public:
    /**
     * 返回git树上两点的最近分割点
     * 
     * @param matrix 接邻矩阵,表示git树,matrix[i][j] == '1' 当且仅当git树中第i个和第j个节点有连接,节点0为git树的跟节点
     * @param indexA 节点A的index
     * @param indexB 节点B的index
     * @return 整型
     */

    int getSplitNode(vector<string> matrix, int indexA, int indexB){     
        vector<bool> visited(matrix.size(),false);
        vector<int> path(matrix.size(),-1);
        queue<int> qu;
        qu.push(0);
        while(!qu.empty()){
            int now=qu.front();
            qu.pop();
            visited[now]=true;
            for(int i=0;i<matrix.size();i++){
                if(matrix[now][i]=='1'&&visited[i]==false){
                    path[i]=now;
                    qu.push(i);
                }
            }
        }
        stack<int> pathA;
        stack<int> pathB;
        while(indexA!=0){
            pathA.push(indexA);
            indexA=path[indexA];
        }
        pathA.push(0);
        while(indexB!=0){
            pathB.push(indexB);
            indexB=path[indexB];
        }
        pathB.push(0);
        int re;
        while(!pathA.empty()&&!pathB.empty()&&pathA.top()==pathB.top()){
            re=pathA.top();       
            pathA.pop();
            pathB.pop();
        }
        return re;
    }
};

(1)path数组用来记录每个节点的双亲,由于双亲是唯一的,所以可以用栈记录从indexA到root节点(0)路径所经过的所有节点。
(2)visited数组用来标记已经访问过的结点,因为matrix表示的结点是双向的,但树是单向的,我们只需要找出当前访问结点所有的子结点,并在path数组标记,同时这些子结点被push到pu队列,进行下一步的访问。
(3)pu队列用来存入子结点等待被访问,matrix是按层序遍历的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值