題目:對於一顆完全二叉樹,要求給所有節點加上乙個pnext指標,指向同一層的相鄰節點;如果當前節點已經是該層的最後乙個節點,則將pnext指標指向null;給出程式實現,並分析時間複雜度和空間複雜度。
答:時間複雜度為o(n),空間複雜度為o(1)。
#include "stdafx.h
"#include
#include
#include
using
namespace
std;
struct
treenode ;//
假定所建立的二叉樹如下圖所示/*1
/ \
2 3
/ \ / \
4 5 6 7
/ \ / \ / \
8 9 10 11 12 13
*/void createbitree(treenode *&pnode, fstream &fin)
else}//
完全二叉樹指向同一層的相鄰結點
void solution(treenode *phead)
vector
vec;
vec.push_back(phead);
treenode *pre =null;
treenode *pnode =null;
int cur = 0
;
int last = 0
;
while(cur
else
if (null != vec[cur]->m_pleft)
if (null != vec[cur]->m_pright)
pre =vec[cur];
cur++;
}pre->pnext =null;
pre =null;
}}int _tmain(int argc, _tchar*argv)
cout
<
phead = phead->m_pleft;
}cout
<
return0;
}
完全二叉樹結點數
222.完全二叉樹的節點個數 給你一棵完全二叉樹的根節點 root 求出該樹的節點個數。完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 ro...
列印二叉樹某一層的節點
按層非遞迴遍歷二叉樹是一道常見的題目,程式設計之美上有乙個列印出二叉樹某一層的節點的問題,稍稍有意思。在程式設計之美上,提到了兩種解法 1 一種是遞迴解法 void translevel node root,int level 2 另一種則是利用佇列的非遞迴解法 如果只是簡單的按層遍歷的話,可以用乙...
按層列印二叉樹 每行列印一層
一,問題介紹 給定一棵二叉樹,按照層序遍歷的順序列印二叉樹。但是要求,每一行列印一層資料。二,演算法分析 借助二叉樹的層序遍歷來實現 使用佇列的先入先出性質保證列印的順序 二叉樹層序遍歷參考 層序列印參考 1 public void printtree binarynoderoot 21if cur...