二叉樹java實現

來源:互聯網
上載者:User

二叉樹的定義:

    二叉樹(BinaryTree)是n(n≥0)個結點的有限集,它或者是空集(n=0),或者由一個根結點及兩棵互不相交的、分別稱作這個根的左子樹和右子樹的二叉樹組成。
    這個定義是遞迴的。由於左、右子樹也是二叉樹, 因此子樹也可為空白樹。中展現了五種不同基本形態的二叉樹。

 

 

二叉樹的遍曆

    遍曆二叉樹 是指以一定的次序訪問二叉樹中的每個結點。所謂 訪問結點 是指對結點進行各種操作的簡稱。例如,查詢結點資料域的內容,或輸出它的值,或找出結點位置,或是執行對結點的其他動作。遍曆二叉樹的過程實質是把二叉樹的結點進行線性排列的過程。假設遍曆二叉樹時訪問結點的操作就是輸出結點資料域的值,那麼遍曆的結果得到一個線性序列。

     (1)訪問結點本身(N),
     (2)遍曆該結點的左子樹(L),
     (3)遍曆該結點的右子樹(R)。
以上三種操作有六種執行次序:
     NLR、LNR、LRN、NRL、RNL、RLN。

   
  由於被訪問的結點必是某子樹的根,所以N(Node)、L(Left subtlee)和R(Right subtree)又可解釋為根、根的左子樹和根的右子樹。NLR、LNR和LRN分別又稱為先根遍曆、中根遍曆和後根遍曆。

二叉樹的java實現

(stack.size()>0){node=stack.pop();node=node.rightChild;} }}//中序遍曆的非遞迴實現public void nonRecInOrder(TreeNode p){Stack<TreeNode> stack =new Stack<BinaryTree.TreeNode>();TreeNode node =p;while(node!=null||stack.size()>0){//存在左子樹while(node!=null){stack.push(node);node=node.leftChild;}//棧非空if(stack.size()>0){node=stack.pop();visted(node);node=node.rightChild;}}}//後序遍曆的非遞迴實現public void noRecPostOrder(TreeNode p){Stack<TreeNode> stack=new Stack<BinaryTree.TreeNode>();TreeNode node =p;while(p!=null){//左子樹入棧for(;p.leftChild!=null;p=p.leftChild){stack.push(p);}//當前結點無右子樹或右子樹已經輸出while(p!=null&&(p.rightChild==null||p.rightChild==node)){visted(p);//紀錄上一個已輸出結點node =p;if(stack.empty())return;p=stack.pop();}//處理右子樹stack.push(p);p=p.rightChild;}}public void visted(TreeNode subTree){subTree.isVisted=true;System.out.println("key:"+subTree.key+"--name:"+subTree.data);;}/** * 二叉樹的節點資料結構 * @author WWX */private class  TreeNode{private int key=0;private String data=null;private boolean isVisted=false;private TreeNode leftChild=null;private TreeNode rightChild=null;public TreeNode(){}/** * @param key  層序編碼 * @param data 資料域 */public TreeNode(int key,String data){this.key=key;this.data=data;this.leftChild=null;this.rightChild=null;}}//測試public static void main(String[] args) {        BinaryTree bt = new BinaryTree();        bt.createBinTree(bt.root);        System.out.println("the size of the tree is " + bt.size());        System.out.println("the height of the tree is " + bt.height());                System.out.println("*******(前序走訪)[ABDECF]遍曆*****************");        bt.preOrder(bt.root);                System.out.println("*******(中序遍曆)[DBEACF]遍曆*****************");        bt.inOrder(bt.root);               System.out.println("*******(後序遍曆)[DEBFCA]遍曆*****************");        bt.postOrder(bt.root);                System.out.println("***非遞迴實現****(前序走訪)[ABDECF]遍曆*****************");        bt.nonRecPreOrder(bt.root);                System.out.println("***非遞迴實現****(中序遍曆)[DBEACF]遍曆*****************");        bt.nonRecInOrder(bt.root);                System.out.println("***非遞迴實現****(後序遍曆)[DEBFCA]遍曆*****************");        bt.noRecPostOrder(bt.root);    }}

 

the size of the tree is 6
the height of the tree is 3
*******(前序走訪)[ABDECF]遍曆*****************
key:1--name:rootNode(A)
key:2--name:B
key:4--name:D
key:5--name:E
key:3--name:C
key:6--name:F
*******(中序遍曆)[DBEACF]遍曆*****************
key:4--name:D
key:2--name:B
key:5--name:E
key:1--name:rootNode(A)
key:3--name:C
key:6--name:F
*******(後序遍曆)[DEBFCA]遍曆*****************
key:4--name:D
key:5--name:E
key:2--name:B
key:6--name:F
key:3--name:C
key:1--name:rootNode(A)
***非遞迴實現****(前序走訪)[ABDECF]遍曆*****************
key:1--name:rootNode(A)
key:2--name:B
key:4--name:D
key:5--name:E
key:3--name:C
key:6--name:F
***非遞迴實現****(中序遍曆)[DBEACF]遍曆*****************
key:4--name:D
key:2--name:B
key:5--name:E
key:1--name:rootNode(A)
key:3--name:C
key:6--name:F
***非遞迴實現****(後序遍曆)[DEBFCA]遍曆*****************
key:4--name:D
key:5--name:E
key:2--name:B
key:6--name:F
key:3--name:C
key:1--name:rootNode(A)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.