劍指offer面試題25

2021-06-22 08:28:48 字數 2300 閱讀 9359

面試題25:二叉樹中和為某乙個值的路徑

/*******二叉樹結點定義*******/

struct binarytreenode

;

預備知識:

vector中的push_back是新增乙個元素

vector中的pop_back是刪除乙個元素

二叉樹的操作:

#include "stdafx.h"

#include "binarytree.h"

//建立樹結點

binarytreenode* createbinarytreenode(int value)

//鏈結結點

void connecttreenodes(binarytreenode* pparent, binarytreenode* pleft, binarytreenode* pright)

}//輸出樹的單個結點,同時也輸出它的子結點

void printtreenode(binarytreenode* pnode)

else

printf("\n");

}//遍歷樹的所有結點,並輸出(這裡使用了前序遍歷:先根結點-左子結點-右子結點)

void printtree(binarytreenode* proot)

}//銷毀樹的所有結點(這裡使用了前序遍歷,銷毀所有的結點)

void destroytree(binarytreenode* proot)

}

思路:這裡我們遇到了乙個新的概念「路徑」,由此不妨可以通過幾個具體的例子加以說明,如可以通過畫圖或列表的形式,從而找到其中的規律。事實上通過具體的例子我們不能發現:當用前序遍歷的方式訪問到某個結點的時候,我們把該結點新增到路徑上,並累加該結點的值。如果該結點為葉結點,並且路徑中結點值的和剛好等於輸入的整數,則當期的路徑符合要求,我們就列印出來。如果當前的結點不是葉結點,那麼繼續訪問它的子結點。當前結點訪問結束後,遞迴函式將自動回到它的父結點。因此,在退出函式的時候,要在路徑上刪除當前結點,並減去當前結點的值,以確保返回父節點時路徑剛好是從根結點到父結點的路徑。

演算法實現:

// 面試題25.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "..\binarytree.h"

#include //vector

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

//二叉樹中和為某一值的路徑

void findpath(binarytreenode* proot, int expectedsum)

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

/**************遞迴的過程***********/

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

if(proot->m_pleft != null) //左子樹

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

if(proot->m_pright != null) //右子樹

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

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

path.pop_back();

}//***************測試**********************

// 10

// / \

// 5 12

// /\

// 4 7

void test1()

// 5

// /

// 4

// /

// 3

// /

// 2

// /

// 1

void test2()

int _tmain(int argc, _tchar* argv)

劍指offer python 面試題2 5

使用python實現 劍指offer 面試題 以此記錄。題目 實現單例模式 單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的乙個類只有乙個例項。即乙個類只有乙個物件例項。原理 使用模組時,第一次匯入會生成.pyc檔案 存放相應...

劍指offer面試題7

面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...