在二叉排序樹中查詢和為給定值的路徑

2021-06-17 18:04:32 字數 2095 閱讀 4061

/*

題目:輸入乙個整數和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。

列印出和與輸入整數相等的所有路徑。例如:輸入整數22 和如下二元樹

10/ \

5 12

/ \4 7

則列印出兩條路徑:10, 12 和10, 5, 7。

思路:1、當訪問到某一節點時,把該結點的值新增到當前和變數,且把該結點壓入棧中。

2、若結點為葉子結點,且當前和變數==期望的和,則列印棧中的結點值,即為所需的路徑。

3、若結點不是葉子結點,繼續訪問它的左孩子結點,訪問它的右孩子結點。

4、刪除該結點。包括從當前和變數中減去結點值,從棧中彈出結點值。此時,已回到父結點。

*//* 查詢路徑** */

void find_way(bst bst, int expectedsum, struct stack *stk, int *cursum)

*cursum += bst->data; //儲存所經路徑值之和

stk->data[stk->top++] = bst->data; //將當前結點值入棧

int isleaf = (!bst->left && !bst->right); //判斷是否為葉子結點

if (expectedsum == *cursum && isleaf)

printf("\n");

} find_way(bst->left, expectedsum, stk, cursum); //否則遞迴查詢左右子樹

find_way(bst->right, expectedsum, stk, cursum);

*cursum -= bst->data; //當前結點處理完後,cursum減當前結點的值,退棧

stk->top--;

}/* 完整** */

#include #include #include #define stack_max 30

/* define binary search tree */

typedef struct node *bst;

/* define ****** stack */

struct stack ;

/* insert node into bst */

void insert(bst *bst, struct node *node)

if (!*bst) else if (node->data < (*bst)->data) else

}/* use a array to build a binary search tree */

void build_bst(bst *bst, int array, int n)

struct node *tmp = null;

for (int i = 0; i < n; i++) else }}

void find_way(bst bst, int expectedsum, struct stack *stk, int *cursum)

*cursum += bst->data; //儲存所經路徑值之和

stk->data[stk->top++] = bst->data; //將當前結點值入棧

int isleaf = (!bst->left && !bst->right); //判斷是否為葉子結點

if (expectedsum == *cursum && isleaf)

printf("\n");

} find_way(bst->left, expectedsum, stk, cursum); //否則遞迴查詢左右子樹

find_way(bst->right, expectedsum, stk, cursum);

*cursum -= bst->data; //當前結點處理完後,cursum減當前結點的值,退棧

stk->top--;

}int main() ;

build_bst(&bst, array, 5);

find_way(bst, 22, &stk, &cursum);

return 0;

}

查詢和二叉排序樹

一般的查詢演算法 include stdafx.h include include using namespace std template size t search vector vec,const type x int tmain int argc,tchar argv 2.折半查詢演算法 t...

查詢 二叉排序樹

順序查詢 順序查詢又叫線性查詢,是最基本的查詢技術,它的查詢過程是 從表中第乙個記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄 如果知道最後乙個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢不成功。順序查詢演算法實現 如下 順序...

查詢 二叉排序樹

動態查詢表 表結構本身是在查詢過程中動態生成的,即對於給定值key,若表中存在其關鍵值等於key的記錄,則查詢成功返回,否則插入關鍵字等於key的記錄。二叉排序樹或者是一顆空樹,或者是具有下列性質的二叉樹 1 若他的左子樹不為空,則左子樹上所有結點的值均小於它的根結點的值。2 若它的右子樹不空,則右...