二叉樹的後序遍歷post order演算法
後序遍歷也是深度優先演算法,在後順序遍歷中,首先訪問左子樹,然後訪問右子樹,最後列印節點或根的值。這就是為什麼根值總是在後序遍歷中最後列印的原因。與許多樹演算法一樣,實現後序遍歷的最簡單方法是使用遞迴。實際上,如果您知道如何使用遞迴編寫先序,則可以使用相同的演算法稍作調整來實現後序遍歷。
使用遞迴進行後序遍歷
遞迴演算法很容易理解,因為它與遞迴preOrder和遞迴inOrder遍歷完全相似。 唯一不同的是訪問或遍歷左子樹,右子樹和根的順序,如下面的程式碼片段所示。
private void postOrder(TreeNode node) { if (node == null) { return; } postOrder(node.left); postOrder(node.right); System.out.printf("%s ", node.data); } |
在後序遍歷中列印二叉樹的Java程式
這裡是一個完整的Java程式,用於在後序遍歷中列印二叉樹的所有節點。
先建立一個名為BialayTrand的類來表示Java中的二叉樹。此類有一個靜態巢狀類來表示樹節點,稱為TreeNode。這類似於map.entry類,用於表示雜湊表中的條目。該類只保留對root的引用,Treenode負責照顧左右子項。
這個類有兩個方法postOrder()和postOrder(TreeNode root),第一個是public,第二個是private。實際遍歷是在第二種方法中完成的,但由於root是類內部的,客戶端無法訪問root,因此建立了postOrder()方法來呼叫私有方法。這是實現遞迴演算法的常用技巧。
這也使您可以在不影響客戶端的情況下更改演算法。我們可以將遞迴演算法改為迭代演算法,客戶端仍然會呼叫post order方法而不知道現在迭代演算法已經到位了。
按後序列印二叉樹節點
import java.util.Stack; /* * Java Program to traverse a binary tree * using postOrder traversal without recursion. * In postOrder traversal first left subtree is visited, followed by right subtree * and finally data of root or current node is printed. * * input: * 55 * / \ * 35 65 * / \ \ * 25 45 75 * / / \ * 15 87 98 * * output: 15 25 45 35 87 98 75 65 55 */ public class Main { public static void main(String[] args) throws Exception { // construct the binary tree given in question BinaryTree bt = BinaryTree.create(); // traversing binary tree using post-order traversal using recursion System.out.println("printing nodes of a binary tree on post order in Java"); bt.postOrder(); } } class BinaryTree { static class TreeNode { String data; TreeNode left, right; TreeNode(String value) { this.data = value; left = right = null; } boolean isLeaf() { return left == null ? right == null : false; } } // root of binary tree TreeNode root; /** * traverse the binary tree on post order traversal algorithm */ public void postOrder() { postOrder(root); } private void postOrder(TreeNode node) { if (node == null) { return; } postOrder(node.left); postOrder(node.right); System.out.printf("%s ", node.data); } /** * Java method to create binary tree with test data * * @return a sample binary tree for testing */ public static BinaryTree create() { BinaryTree tree = new BinaryTree(); TreeNode root = new TreeNode("55"); tree.root = root; tree.root.left = new TreeNode("35"); tree.root.left.left = new TreeNode("25"); tree.root.left.left.left = new TreeNode("15"); tree.root.left.right = new TreeNode("45"); tree.root.right = new TreeNode("65"); tree.root.right.right = new TreeNode("75"); tree.root.right.right.left = new TreeNode("87"); tree.root.right.right.right = new TreeNode("98"); return tree; } } Output printing nodes of a binary tree on post order in Java 15 25 87 98 45 35 75 65 55 |
相關文章
- 二叉樹--後序遍歷二叉樹
- The order of a Tree (二叉搜尋樹+先序遍歷)
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的前中後序遍歷二叉樹
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉搜尋樹的後序遍歷序列
- 二叉樹中序和後序遍歷表示式二叉樹
- 二叉樹的層序遍歷二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 【樹01】對二叉樹前序/中序/後序遍歷演算法的一些思考二叉樹演算法
- 【模板題】- 145. 二叉樹的後序遍歷二叉樹
- 程式碼隨想錄演算法訓練營day14 | leetcode 144. 二叉樹的前序遍歷、145. 二叉樹的後序遍歷、94. 二叉樹的中序遍歷演算法LeetCode二叉樹
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 【資料結構與演算法】二叉樹的 Morris 遍歷(前序、中序、後序)資料結構演算法二叉樹
- python-二叉樹:前、中、後、層序遍歷Python二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 144. 二叉樹的遍歷「前序、中序、後序」 Golang實現二叉樹Golang
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- JZ-023-二叉搜尋樹的後序遍歷序列
- Leetcode 演算法題解系列 - 二叉樹的層序遍歷LeetCode演算法二叉樹
- Leetcode——94.二叉樹的中序遍歷LeetCode二叉樹
- 94. 二叉樹的中序遍歷(迭代)二叉樹
- LeeCode-94. 二叉樹的中序遍歷二叉樹
- LeetCode102.二叉樹的層序遍歷LeetCode二叉樹
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 388,先序遍歷構造二叉樹二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- LeetCode-106-從中序與後序遍歷序列構造二叉樹LeetCode二叉樹
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- 劍指 Offer 33. 二叉搜尋樹的後序遍歷序列
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- 中序線索二叉樹的建立與遍歷二叉樹