(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 並使左邊子區間的所有記錄...