層次遍歷二叉樹,程式設計之美上看過解法,然後在練習了一下。用遞迴和vector,佇列實現了,然後加上了測試函式,測試函式的二叉樹建立方法待改進。
//有一棵二叉樹,請設計乙個演算法,按照層次列印這棵二叉樹。
//給定二叉樹的根結點root,請返回列印結果,結果按照每一層乙個陣列進行儲存,所有陣列的順序按照層數從上往下,且每一層的陣列內元素按照從左往右排列。保證結點數小於等於500。
#include
using
namespace
std;
#include
#include
#define n 10
struct
treenode
};class
treeprinter
vc.push_back(res);
res.clear();
}return
vc; }
int printtreelevel(treenode* root, int level)//
訪問以root為根節點的第level層結點。失敗返回0,成功返回1;
if (level == 0
)
return printtreelevel(root->left, level - 1) + printtreelevel(root->right, level - 1
); }
//二叉樹的深度
int deepth(treenode*root)
return deepth(root->left) > deepth(root->right) ? (deepth(root->left) + 1) : (deepth(root->right) + 1
); }
private
: vector
res;
//方法二:從根節點出發,依次將每層結點從左到右壓入乙個陣列,並用cur記錄當前訪問的結點,last標記當前層的最後乙個結點的下乙個位置(下標從0開始),當cur==last表示當前層訪問結束
public
:
//vector> printtree2(treenode* root)
//
//vectorvc;
//vectorlevel;
//int cur = 0;
//int last = 1;
//while (cur < vc.size())
//
//if (vc[cur]->right)
//
//cur++;
//}//}
//return res;
//}////運用佇列
//vector> printtree1(treenode* root)
//if (cur->right)
//if (last == cur)
//}//return result;
//}//private:
//char test ;
//void createbitree(treenode* root)
//字串型別的樹建立方法
//
//else
// //}
//數字型別的樹建立的方法
//所以這樣方式建立還需要改進
//生成乙個結點
treenode* createnode(int
i)
treenode*cretetree()
;for (int i = 0; i < n;i++)
for (int i = 0; i < n / 2;i++)
p[4]->right =nullptr;
return p[0
]; }
public
:
int getleafnode(treenode*t)
};int
main()
cout
<}
return0;
}
層次遍歷二叉樹
問題 假定根節點位於第0層 1.層次遍歷二叉樹 每層換行分開 2.層次遍歷二叉樹指定的某層 本文 例如 上圖中1.123 4567 82.第三層 78可以看出得出第二問的解,第一問迎刃而解了,所以從問題二下手 1.層次遍歷二叉樹指定的某層 可以得出這樣的乙個結論 遍歷二叉樹的第k層,相當於遍歷二叉樹...
二叉樹層次遍歷
題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。思路 二叉樹的層次遍歷,利用棧的先進後出的特性。struct treenode class solution res.push back temp while m.empty m中是從左往右入棧,這裡把它反過來,s中是從右往左...
二叉樹層次遍歷
層次遍歷二叉樹,每一次儲存在list中,結果按從葉子層到根,從左到右的順序儲存 一 class solution return lists 相當於在先序的基礎上改進,level是每個node所在的層次。如果lists大小和level相等,說明開始新一層的儲存。如果不等,則直接把值存入相應層次的lis...