欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java 前序遍歷和棧

林雅南1年前8瀏覽0評論

Java中的樹結(jié)構(gòu)是一種非常常見的數(shù)據(jù)結(jié)構(gòu)。在樹結(jié)構(gòu)中,遍歷是一個重要的算法。前序遍歷是其中一種經(jīng)常使用的遍歷方式。

public void preorderTraversal(Node node) {
if (node == null) {
return;
}
System.out.print(node.value + " ");
preorderTraversal(node.left);
preorderTraversal(node.right);
}

上述代碼展示了使用遞歸方式進行前序遍歷的代碼。根據(jù)前序遍歷的定義,一個節(jié)點的值應(yīng)該在遍歷它的左右子節(jié)點之前輸出,因此代碼先輸出當(dāng)前節(jié)點的值,再依次遞歸遍歷左子節(jié)點和右子節(jié)點。

在遍歷樹結(jié)構(gòu)時,棧也是一種常用的數(shù)據(jù)結(jié)構(gòu)。可以通過棧實現(xiàn)非遞歸方式的前序遍歷。

public void nonRecursivePreorderTraversal(Node root) {
if (root == null) {
return;
}
Stackstack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
Node node = stack.pop();
System.out.print(node.value + " ");
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}

上述代碼使用了棧來實現(xiàn)前序遍歷。首先將根節(jié)點壓入棧中,然后進行循環(huán),每次彈出棧頂元素并輸出。接著將當(dāng)前節(jié)點的右子節(jié)點和左子節(jié)點分別壓入棧中。由于棧的先進后出特性,可以確保左子節(jié)點先于右子節(jié)點被訪問。