資料結構與演算法學習記錄 按層次列印二叉樹結點的值

2021-08-15 23:20:08 字數 837 閱讀 2273

(from 牛客)

解題關鍵:找到當前結點所在行的最後乙個結點last,找到下一行的最後乙個結點nlast。層次遍歷要使用佇列。

初始狀態:將last和nlast都指向第乙個結點,將第乙個結點放入佇列。

以下操作在佇列不為空的情況下進行:

獲取佇列中第乙個元素,判斷是否有左子樹,有的話將其入佇列,令nlast為左子樹;判斷是否有右子樹,有的話將其入佇列,令nlast為右子樹;

判斷當前結點是否為當前行的最後乙個結點,即是否為last。是的話就列印標記(如列印空格)表示當前行結束,同時last指向nlast(能確定nlast一定是下一行的最後乙個結點的原因是last的左右子樹此時已經遍歷完畢,即下一行全部結點均遍歷完畢);不是則執行佇列不為空時的第一步。

以下**實現以上功能並把樹中結點的值存入二維陣列中,需要建立arraylist動態二維陣列臨時存放樹的遍歷結果,然後再存入二維陣列中。

/*

public class treenode

}*/public

class

treeprinter

if(node.right!=null)

if(node == last)

}int list = new

int[raws.size()];

for(int i = 0;icount = raws.get(i);

int j = 0;

list[i] = new

int[count.size()];

for(int number : count)

}return list;

}}

資料結構與演算法 學習記錄(壹)

群集是一種結構化的資料型別。群集可以分為兩類 線性的和非線性的。線性群集是一張元素列表,表中的元素順次相連。線性群集中的元素通常由位置來決定次序 例如,第乙個元素 第二個元素 第三個元素,依次類推 在現實世界中,購物清單就是很好的線性群集例項。而在計算機世界中 當然這也是真實世界 則把陣列設計成線性...

資料結構與演算法學習記錄(堆疊應用)

例如中綴表示式為a b c,其對應的字尾表示式是abc 首先將其轉化為全括號表示式 a b c 看表示式的右括號,如果把操作符 移到右括號的位置,替代它,再把左括號刪去,這個式子就可以變成字尾形式 字尾表示式的操作符要比運算元晚輸出,而實際掃瞄中綴表示式時,在碰到第二個運算元之前,已經掃瞄到了操作符...

資料結構與演算法學習記錄 快速排序

快速排序的基本思想 分治法,即,分解,求解,組合 分解 在無序區r low.high 中任選乙個記錄作為基準 通常選第乙個記錄,並記為pivot,其下標為pivotpos 以此為基準劃分成兩個較小的子區間r low,pivotpos 1 和r pivotpos 1 high 並使左邊子區間的所有記錄...