#include
#include
#include
using namespace std;
struct treenode
};class solution
if (q.front()->right != null)
q.pop();
}return res;}};
//重建二叉樹
treenode* reconstructbinarytree(vectorpre, vectorvin)
int left_size = new_vin_l.size();
for (int i = 1; i <= left_size; i++)
new_pre_l.push_back(pre[i]);
for (int i = left_size + 1; i < length; i++)
int right_size = new_pre_r.size();
if (left_size > 0)root->left = reconstructbinarytree(new_pre_l, new_vin_l);
if (right_size > 0)root->right = reconstructbinarytree(new_pre_r, new_vin_r);
return root;
}int main()
;int v2 = ;
vectorpre(&v1[0], &v1[sizeof(v1) / sizeof(int)]), vin(&v2[0], &v2[sizeof(v2) / sizeof(int)]);//使用陣列初始化vector時,vector(start, end)注意end的位址是陣列最後乙個元素的後乙個位址
solution mys;
m_tree = reconstructbinarytree(pre, vin);
vectorres=mys.printfromtoptobottom(m_tree);
for (int i = 0; i < res.size(); i++)
cout << "end" << endl;
system("pause");
}總結:
1.這種從上到下從左到右的訪問方式不同於中序前序後續的遍歷。
經典做法,使用乙個佇列q,先將根節點放入q,然後每列印佇列中的乙個節點就加將該節點的左右節點依次放入佇列。(當然,使用兩個陣列也可以,乙個記錄當前層,乙個記錄下一層,連續更新,不過沒有佇列方便)
Python劍指offer 分行從上到下列印二叉樹
從上到下按層列印二叉樹,同一層的節點按照從左到右 的順序列印,每一層列印到第一行,例如本題中上乙個問題的二叉樹 輸出形式會是 86 10 5 7 9 11 這道題和前面一道題十分類似,也可以用乙個佇列來儲存要列印的節點。為了把二叉樹的每一行單獨列印到一行裡,我們需要兩個變數 乙個變數表示當前層中還沒...
劍指Offer 從上到下列印二叉樹
2.題目 2 3.題目 3 不分行從上到下列印二叉樹。從上到下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。輸入 8 6 10 57 911輸出 8610 57911這個其實就是層序遍歷。每次列印乙個結點的時候,若該結點有子結點,則讓該結點的子結點放到乙個佇列的末尾。接下來到佇列的首部...
劍指offer 從上到下列印二叉樹
普通的列印二叉樹很簡單,使用佇列就可以解決。但是我做的這個題目是要將每一層的節點都存起來,而且不同層之間是分開儲存的。其中有個問題就是我們如何去判斷某一層是遍歷完了,然後要到下一層了呢。我們可以這樣解決,記住每層的個數,這樣遍歷上一層時我們知道上一層個數了就不會遍歷下一層的節點 而遍歷過程中也要把子...