總體來說分為遞迴和非遞迴實現
前序遍歷
/**
*二叉樹前序遍歷dlr
*/public static void preorder(treenode rootnode)
}
/**
* 前序非遞迴實現,借助棧,先進後出
** @param
*/public static void preordernonrecursive(treenode root)
//棧stacks = new stack<>();
//while (true)
if (s.isempty())
root = s.pop();
root = root.getrightnode();
}}
中序遍歷
/**
* 中序遍歷
*/public void inorder(treenode root)
}`
/**
* 二叉樹中序遍歷
** @param root
*/public void inordernonrecursive(treenode root)
/*** 靠棧實現
*/stacks = new stack<>();
while (true)
if (s.isempty())
system.out.println(root.getdata());
//出棧,操作右節點
root = s.pop();
root = root.getrightnode();
}}
後序遍歷』
後序遍歷的實現相對複雜一點。 後序遍歷中的每個節點需要訪問兩次:1.左子樹遍歷的時候需要訪問一次,2遍歷右子樹的時候需要訪問一次。所以在進行資料節點訪問的時候要考慮到底是遍歷左子樹的返回還是右子樹的返回。非遞迴實現後序遍歷判斷:當出棧的節點,和棧頂元素的右節點作比較,相同則已經完成了左右子樹的遍歷,直接輸出棧定元素即可。
/**
* 後序遍歷非遞迴實現
** @param root
*/public void postordernonrecursive(treenode root) else
/*** 進行節點遍歷輸出
*/if (s.peek().getrightnode() == null)
if (!s.isempty()) }}
}}
二叉樹的迭代遍歷(前,中,後)
目錄 1 迭代方式的前序遍歷 2 迭代方式的中序遍歷 3 迭代方式的後續遍歷 class solution stacks new stack while root null s.isempty root s.peek s.pop root root.right return res 思路 採用棧作為...
二叉樹的前中後層遍歷
package com.data.tree public class bitree package com.data.tree classname treetest description todo author payphone date 2018年12月24日 下午1 44 07 version...
二叉樹的遍歷(前,中,後,層序)
二叉樹的遍歷是指從根節點出發,按照某種次序依次訪問二叉樹中所有節點,使得每個節點僅被訪問一次 前序遍歷 若二叉樹為空,則空操作返回,否則先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。結果是 abdghceif 中序遍歷 若樹為空,則空操作返回,否則從根節點開始 注意並不是先訪問根節點 中序遍歷...