二叉樹中,列印根節點到指定節點的路徑——後序遍歷的變型解答
阿新 • • 發佈:2019-01-03
題目:二叉樹中,列印根節點到指定節點的路徑
此型別題目,如上或找兩個指定節點的最短路徑,一律要往二叉樹遍歷思想上靠。
此題解答即用到後序遍歷的改進而來。
從二叉樹中列印兩個指定節點的最短路徑,需要用到中序遍歷。言歸正傳。
此題程式碼實現:
#include<vector> #include<iostream> using namespace std; struct TreeNode { int val; TreeNode* left, *right; TreeNode(int x):val(x),left(nullptr),right(nullptr){} }; vector<TreeNode*> res; void advPostOrder(TreeNode* root,TreeNode* node) { if (!root)//遞迴終止條件之一 return; if (root == node) {//遞迴終止條件之二 res.push_back(node); return; } if (root->left) advPostOrder(root->left, node); if (root->right) advPostOrder(root->right, node); //以下表明,陣列中已存在節點,且本遍歷節點的左或右兒子是陣列未端節點 if (!res.empty()&&(root->left==res.back()||root->right==res.back())) res.push_back(root); } int main() { TreeNode a(1), b(2), c(3), d(4), e(5), f(6), g(7), h(8), i(9); a.left = &b; a.right = &c; b.left = &d; b.right = &e; d.left = &f; d.right = &g; e.left = &h; e.right = &i; advPostOrder(&a, &i); return 0; }