对于只有一个叶节点的每个父亲,请删除该叶子并为其添加值

时间:2019-06-01 19:35:37

标签: c recursion binary-tree

如果我找到一个只有叶子的父亲作为孩子,我必须删除叶子,并向父亲添加其价值

这是我的解决方案,但是当我尝试取下叶子时遇到问题

import requests
import time

from bs4 import BeautifulSoup

URL = 'https://weather.com/weather/tenday/l/USPA1290:1:US'


def fetch(url):
    with requests.Session() as s:
        r = s.get(URL, timeout=5)
        return r


def main():
    start_t = time.time()
    resp = fetch(URL)
    print(f'Got response: {resp.status_code}')
    html = resp.text
    bs = BeautifulSoup(html, 'html.parser')
    tds = bs.find_all('td', class_='twc-sticky-col', attrs={'headers': 'day'})
    for td in tds:
        date_time = td.find_next('span', class_='date-time')
        day_detail = td.find_next('span', class_='day-detail')
        temp = td.find_next('td', class_='temp', attrs={'headers': 'hi-lo'})
        hi_lo = '/'.join(i.text for i in temp.find_all('span', class_=''))
        print(f'{date_time.text:5} {day_detail.text:6} {hi_lo}')
    end_t = time.time()
    elapsed_t = end_t - start_t
    r_time = resp.elapsed.total_seconds()
    print(f'Total: {elapsed_t:.2f}s, request: {r_time:.2f}s')


if __name__ == '__main__':
    main()

最小:

bool isLeaf(tree a){ //function to verify if the node is a leaf

if(a->left==NULL && a->right==NULL)
    return true;
else
    return false;
}


void removeLeaves(tree* a){

if(*a == NULL) return;

//verify if the node has only a child
 if(((*a)->left==NULL&&(*a)->right!=NULL) || ((*a)->right==NULL&&(*a)->left!=NULL)){

    if((*a)->right==NULL){ //if has only left child,verify  if it is a leaf
        if(isLeaf((*a)->left)){
            (*a)->info = (*a)->info + (*a)->left->info; 
            free((*a)->left);



        }
    }
    if((*a)->left==NULL){ //if has only right child,verify  if it is a leaf
        if(isLeaf((*a)->right)){
            (*a)->info = (*a)->info + (*a)->right->info; 
            free((*a)->right);

        }
    }
}


removeLeaves(&((*a)->left));
removeLeaves(&((*a)->right));
}

如果我达到了这一点(左边只有一个孩子,那是一片叶子),我会与父亲求和,然后释放它。没有自由,我获得了总和,但是有了自由,我得到了细分错误。同一件事,只有一个孩子在右边。

1 个答案:

答案 0 :(得分:0)

释放叶子后,需要将其在父对象中的条目设置为空。

您的函数是递归的。如果找到单个叶子,则其内存被释放,但是在功能结束时,它将尝试访问该内存。这就是所谓的“悬空指针”。