名企演算法題目總結(4)
1.二叉樹的遞迴非遞迴遍歷
考慮一個完全二叉樹 1234567,
先序非遞迴,列印1,處理2,處理3 直接迴圈配合一個棧和hashtable,hashtable儲存節點的處理方式(列印為false,處理為true);
push(3),hashtable[3]=true;
push(2),hashtable[2]=true;
push(1),hashtable[1]=false;
中序非遞迴,處理2 ,列印1,處理3 ,直接迴圈配合一個棧和hashtable,hashtable儲存節點的處理方式(列印為false,處理為true)
push(3),hashtable[3]=true;
push(1),hashtable[1]=false;
push(2),hashtable[2]=true;
後序非遞迴,處理2,處理3,列印1,直接迴圈配合一個棧和hashtable,hashtable儲存節點的處理方式(列印為false,處理為true)
push(1),hashtable[1]=false;
push(3),hashtable[3]=true;
push(2),hashtable[2]=true;
面試手擼3種非遞迴,不準備,臨時自己想,能寫得又快又好,要麼是大神,要麼是記憶裡驚人的(很容易忘記的,哎),菜雞琢磨了半天,終於找到適合自己的路子
2. 列印二叉樹的邊界(每層最左,最右邊,葉子節點)
層次遍歷,標記節點層數,當訪問節點的層數發生變化時候肯定就是邊界啦
生成最左集合,最右集合,葉子集合,與頭結點,然後做個刪選排序就行啦
時間複雜度O(n),空間複雜度,考慮最壞O(n);
先序遍歷:
遞迴的時候傳遞層數資訊,陣列標記層數是否訪問到(某層首次訪問必然是左邊界)
反向先序遍歷,.............................................................................右邊界
葉子節點集合
3. 線索二叉樹,建立索引的規則,時刻.使用線索,先序中序後序遍歷二叉樹
4.累加和為key的最長搜尋序列