树寻找根节点

这是一个C++实现的寻找树中根节点的程序。通过两种不同的方法,`findRoot1`利用每个节点输入次数的特性,找到输入次数为奇数的节点作为根;`findRoot2`则初始化所有节点的父节点为-1,然后根据输入更新,最终找到父节点仍为-1的节点作为根。
摘要由CSDN通过智能技术生成
//
//  main.cpp
//  寻找根节点
//
//  Created by liujan on 1/13/15.
//  Copyright (c) 2015 liujan. All rights reserved.
//

#include <iostream>
#include "memory.h"
using namespace std;

/*
 *每个节点的id在输入父节点时被输入一次,输入本身时一次,两个子节点时又两次,所以其输入次数肯定为偶数
 *根节点只会被输入奇数次
 */
int findRoot1(int n){
    int *isroot = new int[n*n];
    memset(isroot, 0, sizeof(isroot));
    for (int i = 0; i < n; i++){
        int id, l, r;
        cin >> id >> l >> r;
        isroot[id]++;
        isroot[l]++;
        isroot[r]++;
    }
    int root;
    for (int i = 0; i < n*n; i++){
        if (isroot[i] % 2 != 0)
            root = i;
    }
    return root;
}
/*
 *先把所有节点的父节点设为-1,在输入节点时再设置每个节点的父节点
 *最后父节点仍为-1的那个点肯定是根节点
 */
int findRoot2(int n){
    int *root = new int[n*n];
    memset(root, -1, sizeof(root));
    for (int i = 0; i < n; i++){
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值