二叉樹中查詢和為某一值的所有路徑

2021-06-22 07:44:52 字數 1623 閱讀 2791

第二步, 如何查詢? 思想如下: 利用棧的思想,乙個乙個將樹的結點壓入棧,同時利用乙個全域性變數來記錄棧中所有樹結點資料之和,判斷是否等於所要查詢之和?同時判斷當前樹結點是否為葉子結點?如果同時滿足,則找到一條路徑,列印棧中資料。(逆序輸出)

先建立如下二叉樹:

則輸入:1213000210003200500

如果查詢和為6的路徑:

理論上可推出有: 1,2,2,1 和1,3,2

**:

// bitree.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

typedef int type;

int record=0;

//定義數結點

typedef struct bnode

bnode,*btree;

//定義路徑結點 棧結點

typedef struct path

path,*ppath;

//初始化路徑

void initpath(ppath &l)

//樹節點入棧

void push(ppath l, btree t)

//樹節點出棧函式

void pop(ppath l)

//判斷是否為葉子結點

int isleaf(btree t)

//計算棧長度

int len(ppath l)

return i;

}//列印棧中所有資料

void print(ppath l)

for(int j=length-1;j>=0;j--)

cout

if((sum==record)&&(isleaf(t)))

if(null!=t->lchild) //遞迴查詢左孩子結點

if(null!=t->rchild) //遞迴查詢右孩子結點

record-=t->data;

pop(l);

}//先序建立二叉樹

void createbitree(btree &t)

else }

//先序遍歷

void preorder(btree t)

}//中序遍歷

void inorder(btree t)

}//後序遍歷

void postorder(btree t)

}//計算樹的深度

二叉樹中找出和為某一值的所有路徑

題目 輸入乙個整數和一顆二叉樹。從樹結點到葉結點經過的結點定義為一條路徑。找出路徑上所有結點和為該整數的路徑並列印出來。定義二叉樹結點為下 struct binarytreenode void findpath binarytreenode root,int value,vector vec vec...

如何在二叉樹中找出和為某一值的所有路徑

如下所示,不足之處,還望指正!複製 如下 binarytree.cpp 定義控制台應用程式的入口點。c 實現鏈式二叉樹,在二叉樹中找出和為某一值的所有路徑 include stdafx.h include include include using nam程式設計客棧espace std stati...

列印二叉樹中路徑和為某一值的所有路徑

搜尋所有可能的一般思路 遞迴 回溯 一點思考 考慮了當前元素,就需要回溯,沒有考慮當前元素,就不需要回溯,直接返回即可。部落格 void printary int path,int nsize printf n void helper node proot,int sum,int path,int ...