輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)
struct treenode
該題是考察樹的遍歷,我們可以逆向思維,從葉子節點到根節點只會有一條路徑,所有關鍵就在於遍歷出這條路徑並記錄下和值就能達到題意所說。
實現如下:
#pragma once
#include using namespace std;
namespace tree_sum
};class solution
foreach(root, vec, ret, sum);
for (int i = 0; i < ret.size(); ++i)}}
return ret;
}void foreach(treenode* root, vectorvec, vector> &ret, int sum)
return;
}if (root->left != nullptr)
foreach(root->left, vec, ret, sum);
if (root->right != nullptr)
foreach(root->right, vec, ret, sum);
}int _expectnumber;
};}
test.cpp
#pragma once
#include "tree_sum.h"
namespace tree_sum
private:
};}
二、優化
我們發現,生成完二維陣列後,還進行了一次排序,把大的放在前面,這部分應該有優化的空間。
優化實現,暫無。
二叉樹中和為某一值的路徑
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 分析 用先序遍歷的方式遍歷二叉樹,初始時路徑為空。訪問乙個結點時若不到葉子結點且結點的和小於這個值那麼就把這個結...