求和為n的路徑

2021-08-22 08:20:21 字數 1656 閱讀 3416

// 面試題34:二叉樹中和為某一值的路徑

// 題目:輸入一棵二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所

// 有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

void findpath(binarytreenode* proot, int expectedsum, std::vector& path, int& currentsum);

void findpath(binarytreenode* proot, int expectedsum)

// 如果不是葉結點,則遍歷它的子結點

if(proot->m_pleft != nullptr)

findpath(proot->m_pleft, expectedsum, path, currentsum);

if(proot->m_pright != nullptr)

findpath(proot->m_pright, expectedsum, path, currentsum);

// 在返回到父結點之前,在路徑上刪除當前結點,

// 並在currentsum中減去當前結點的值

currentsum -= proot->m_nvalue;

path.pop_back();// ********************測試**********************

void test(char* testname, binarytreenode* proot, int expectedsum)

{ if(testname != nullptr)

printf(「%s begins:\n」, testname);

findpath(proot, expectedsum);

printf("\n");

// 10

// / \

// 5 12

// /\

// 4 7

// 有兩條路徑上的結點和為22

void test1()

{ binarytreenode* pnode10 = createbinarytreenode(10);

binarytreenode* pnode5 = createbinarytreenode(5);

binarytreenode* pnode12 = createbinarytreenode(12);

binarytreenode* pnode4 = createbinarytreenode(4);

binarytreenode* pnode7 = createbinarytreenode(7);

connecttreenodes(pnode10, pnode5, pnode12);

connecttreenodes(pnode5, pnode4, pnode7);

printf("two paths should be found in test1.\n");

test("test1", pnode10, 22);

destroytree(pnode10);

// 10

// / \

// 5 12

// /\

// 4 7

// 沒有路徑上的結點和為15

求和為n的連續正整數序列

題目 輸入乙個正數n,輸出所有和為n連續正整數序列。例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所以輸出3個連續序列1 5 4 6和7 8。解法1 因為整數序列是有序的,可以設立兩個游標begin和end,通過判區間 begin,end 的和是否為n來得到這個序列。如果區間和大於...

N個數求和

n個數求和 本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入格式 輸入第一行給出乙個正整數n le 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定...

N個數求和

本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。輸出上述數字...