前序中序後序,按層次。
這裡遞迴的很好寫就不寫了,主要複習非遞迴的。
樹: 4
2 6
1 3 5 7 810
非遞迴前序:
/**
unrecursive preorder, 非遞迴前序遍歷
**/preorder(binarytreeroot)
if(!s.empty())
} }
非遞迴前序遍歷: 4 2 1 3 6 5 7 8 10
首輪寫的時候兩個忘記的地方:
//非遞迴前序遍歷沒注意到的兩個問題:
1)n!=null || !s.empty() 應該是||,因為訪問至最左下角1的時候,需要先將1的left進棧,發現空後pop1,
然後push1的右孩子,其實還是空,然後進入下乙個大迴圈,此時如果使用&&就跳出了,應該用||使得繼續直接執行至pop1的父親2,然後繼續。
2) if(!s.empty()) //注意這裡棧pop前新增判斷有助於防止空棧溢位。
/**unrecursive inorder, 非遞迴中序遍歷
**/inorder(binode t)
if(!s.empty()) }}
非遞迴中序遍歷:1 2 3 4 5 6 7 8 10
程式設計題 二叉樹
時間限制 3秒 空間限制 32768k 有一棵二叉樹,樹上每個點標有權值,權值各不相同,請設計乙個演算法算出權值最大的葉節點到權值最小的葉節點的距離。二叉樹每條邊的距離為1,乙個節點經過多少條邊到達另乙個節點為這兩個節點之間的距離。給定二叉樹的根節點root,請返回所求距離。強調一點 我就是被卡在這...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
二叉樹遍歷
二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...