/**
* 前序 深度優先
* lang
* @param node
*/public static void preorder1(treenode node)
if (!stack.empty())
} }/**
* 中序遍歷
* lang
* @param node
*/public static void midorder1(treenode node)
if (!stack.empty())
} }/**
* 後序遍歷
* 非遞迴
*/public static void posorder1(treenode node)
while (!stack1.empty() && stack2.peek() == i)
if (!stack1.empty())
} }/* * 層序遍歷 廣度優先
* 非遞迴
*/public static void levelorder1(treenode node)
queuequeue = new linkedlist<>();
queue.add(node);
while (queue.size() != 0)
if (node.right != null)
} }
給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
class solution
while(root!=null)
stack.push(node);
node = node.left;
}if (!stack.empty())
} return list;
}}
上述方法會超過記憶體
解題思路:遞迴搜尋左右子樹,如果左子樹和右子樹都不為空,說明最近父節點一定在根節點。
反之,如果左子樹為空,說明兩個節點一定在右子樹;同理如果右子樹為空,說明兩個節點一定在左子樹。
public static treenode lowestcommonancestor3(treenode root, treenode p, treenode q) else else
}// return left == null ? right : right == null ? left : root;
}
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
二叉樹遍歷
二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...
二叉樹遍歷
描述 華為實習生招聘,有一道類似如下的題目 給出二叉樹,如圖1所示 圖 1 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...