国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網 會員登陸 & 注冊

Java如何實現遞歸?

2023-02-17 17:06 作者:YSOcean  | 我要投稿

在Java中,二叉樹的后序遍歷可以使用遞歸或迭代的方式進行實現。

  1. 遞歸實現

遞歸實現后序遍歷的思路是先遞歸訪問當前節(jié)點的左子樹,再遞歸訪問右子樹,最后訪問當前節(jié)點本身。

下面是一個遞歸實現的示例代碼:

public void postOrderTraversal(TreeNode root) { ? ?if (root != null) { ? ? ? ?postOrderTraversal(root.left); ? ? ? ?postOrderTraversal(root.right); ? ? ? ?System.out.print(root.val + " "); ? ?}}

在上述代碼中,postOrderTraversal()方法是一個遞歸方法,它首先遞歸訪問當前節(jié)點的左子樹,然后遞歸訪問右子樹,最后訪問當前節(jié)點本身。

  1. 迭代實現

迭代實現后序遍歷的思路是使用棧來保存待訪問的節(jié)點。首先將根節(jié)點入棧,然后循環(huán)執(zhí)行以下操作:

  • 從棧頂取出一個節(jié)點,如果該節(jié)點沒有子節(jié)點或者其子節(jié)點已經被訪問過,則訪問該節(jié)點并將其從棧中彈出;

  • 如果該節(jié)點有子節(jié)點且子節(jié)點尚未被訪問過,則依次將其右子節(jié)點、左子節(jié)點入棧。

下面是一個迭代實現的示例代碼:

public void postOrderTraversal(TreeNode root) {

? ? Stack<TreeNode> stack = new Stack<>();

? ? TreeNode lastVisited = null; // 記錄上一個訪問的節(jié)點

? ? while (root != null || !stack.isEmpty()) {

? ? ? ? // 將左子節(jié)點入棧

? ? ? ? if (root != null) {

? ? ? ? ? ? stack.push(root);

? ? ? ? ? ? root = root.left;

? ? ? ? }

? ? ? ? else {

? ? ? ? ? ? TreeNode peekNode = stack.peek();

? ? ? ? ? ? // 如果該節(jié)點沒有右子節(jié)點或者右子節(jié)點已經被訪問過,則訪問該節(jié)點并將其從棧中彈出

? ? ? ? ? ? if (peekNode.right == null || peekNode.right == lastVisited) {

? ? ? ? ? ? ? ? System.out.print(peekNode.val + " ");

? ? ? ? ? ? ? ? lastVisited = stack.pop();

? ? ? ? ? ? }

? ? ? ? ? ? // 否則將右子節(jié)點入棧

? ? ? ? ? ? else {

? ? ? ? ? ? ? ? root = peekNode.right;

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

在上述代碼中,postOrderTraversal()方法是一個迭代方法,它使用了一個棧來保存待訪問的節(jié)點,并使用lastVisited變量來記錄上一個訪問的節(jié)點。在循環(huán)中,如果當前節(jié)點沒有左子節(jié)點,則從棧頂取出一個節(jié)點并訪問它;否則將左子節(jié)點入棧。如果當前節(jié)點沒有右子節(jié)點或者右子節(jié)點已經被訪問過,則訪問該節(jié)點并將其從棧中彈出;否則將右子節(jié)點入棧。

Java如何實現遞歸?的評論 (共 條)

分享到微博請遵守國家法律
玛纳斯县| 湘西| 文登市| 定边县| 大方县| 惠州市| 长葛市| 福海县| 南木林县| 宁陵县| 靖西县| 唐河县| 蓝田县| 穆棱市| 延边| 虞城县| 堆龙德庆县| 上饶县| 三都| 湖北省| 永吉县| 聂拉木县| 印江| 禹城市| 斗六市| 济南市| 阿克苏市| 桐庐县| 龙里县| 宁化县| 渭源县| 铜陵市| 万山特区| 锡林浩特市| 西华县| 靖远县| 邯郸市| 濉溪县| 锦州市| 招远市| 涟源市|