/**
* 二叉樹節點類
* @author wj
* */
class treenode
}/**
* 二叉樹類
* @author wj
* */
class binarytree
} private void add_node_to_tree(int value)
/*** 建立二叉樹
*/treenode currentnode = treenode;
while(true) else
}elseelse
}} }
/*** 中序遍歷
* @param node
*/public static void inorder(treenode node) }
/*** 前序遍歷
* @param args
*/public static void perorder(treenode node)
} /**
* 後序遍歷
*/public static void postorder(treenode node)
} /**
* 非遞迴先序遍歷
* @param node
*/public static void newperorder(treenode head)
stackstack = new stack<>();
stack.add(head);
while(!stack.empty())
if(head.left_node != null)
} } /**
* 非遞迴中序遍歷
* @param node
*/public static void newinorder(treenode head)
stackstack = new stack<>();
while(!stack.empty() || head!= null) else
}} /**
* 非遞迴後序遍歷
* @param node
*/public static void newpostorder(treenode head)
stackstack = new stack<>();
stackstack1 = new stack<>();
stack.add(head);
while(!stack.empty())
if(head.right_node != null)
} while(!stack1.empty()) }}
public class test2 ;
binarytree binarytree = new binarytree(data);
binarytree.inorder(binarytree.treenode);
system.out.println();
binarytree.perorder(binarytree.treenode);
system.out.println();
binarytree.postorder(binarytree.treenode);
system.out.println();
binarytree.newperorder(binarytree.treenode);
system.out.println();
binarytree.newinorder(binarytree.treenode);
system.out.println();
binarytree.newpostorder(binarytree.treenode);
}}
先序:中 左 右
中序:左 中 右
後序:左 右 中
非遞迴前,中,後序遍歷二叉樹
相比遞迴遍歷二叉樹,非遞迴遍歷二叉樹稍難一些,而又數非遞迴後序遍歷二叉樹更難。在我通過與這段時間所學資料結構相結合,學習和了解了非遞迴遍歷二叉樹的方法,這裡三種遍歷方式都會用到棧,利用棧的逐層壓棧與先進後出的特點,類似於用 實現了遞迴遍歷二叉樹的基本方法。非遞迴二叉樹的遍歷個人認為注重的是思想,實現...
二叉樹的前中後序非遞迴遍歷
前序遍歷最簡單,無腦入棧無腦出棧,出棧的時候先入右再入左即可。class solution stack.push root while stack.size 0 if temp.left null return res 中序遍歷比較特殊,要有乙個前驅指標p來一直向左試探,所以條件上多了一項p nul...
二叉樹的前 中 後序遍歷(遞迴與非遞迴)
常見的二叉樹的遍歷有三種方式 前序遍歷 根節點,左子樹,右子樹 中序遍歷 左子樹,根節點,右子樹 後序遍歷 左子樹,右子樹,根節點 每種方式都可以用遞迴和非遞迴來實現 一 遞迴遍歷 1.先序遍歷 先訪問根節點,再訪問左子樹,左子樹訪問完之後,訪問右子樹 void btreeprevorder btn...