1.問題描述
輸入一顆二叉樹和乙個整數,列印出二叉樹中的結點值的和為輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(來自《劍指offer》)
2.分析
找到值為某一值的路徑,我們知道無非就是樹的遍歷,但是怎麼儲存呢?因為樹在遍歷的時候需要遞迴,我們可以用棧來儲存路徑。比如:我們開始遍歷 先是根結點 壓棧,在是左孩子 壓棧,如果左孩子是葉子結點的話,那麼我們判斷和是不是我們期望的值 如果是那麼 列印 棧裡面的內容,然後出棧(不管和是不是期望值),在右孩子 壓棧,重複上面的過程。這樣我們就能得到所有的路徑。
3.**
void findpath(treenode* node,stack *s,int sum)
stacknode *snode = (stacknode*)malloc(sizeof(stacknode));
snode->data = node->data;
push(s, snode);
if (!node->lchild && !node->rchild)
}if (node->lchild != null)
if (node->rchild != null)
pop(s);
}
二叉樹中和為某一值的路徑
include include using namespace std struct node void find path node r,int exceptedsum,vector path,int cursum node buildbtree int a,int i void preorder...
二叉樹中和為某一值的路徑
要輸出所有的路徑,必須額外用乙個棧來儲存當前路徑資訊。當訪問到節點a時,節點a的資訊要在訪問a的左右子樹時用到,因而,該資訊必須在遍歷a的左右子樹前加入到棧中,而在遍歷完a的左右子樹後從棧中移除。每訪問乙個節點,就計算當前路徑值 可直接利用父節點的路徑值 當其等於給定值且當前節點是葉子節點時,就列印...
二叉樹中和為某一值的路徑
面試題25 二叉樹中和為某一值的路徑 struct binarytreenode int value binarytreenode pleft binarytreenode pright 分析 用先序遍歷的方式遍歷二叉樹,初始時路徑為空。訪問乙個結點時若不到葉子結點且結點的和小於這個值那麼就把這個結...