在網上找了很多知道先序中序建立二叉樹的例子,但是看不懂,所以自己耐心寫了乙個,並附有詳細的注釋。
首先描述一下大致的演算法例如:
先序 e,a,c,b,d,g,f
中序 a,b,c,d,e,f,g
先序的第乙個節點e,就是頭節點,所以中序中e的左半部分單獨當做乙個二叉樹處理,右半部分一樣,即:
(a,b,c,d),e,(f,g)
右半部分(a,b,c,d)在先序是a,c,b,d
左半部分(f,g)的先序是g,f
我們可以得出左半部分的頭結點a,就是e的左節點;找出右半部分的頭結點g就是右節點。
再找a的左節點和右節點就是乙個遞迴了。以下直接貼**
/**
*二叉樹建模
**/public class mybinarytree }
private u preorder = null;
private u inorder = null;
private u suforder = null;
public u getpreorder()
public void setpreorder(u preorder)
public u getinorder()
public void setinorder(u inorder)
public u getsuforder()
public void setsuforder(u suforder)
/***根據二叉樹先序和中序建立二叉樹模型,返回頭結點
*@param preorder 先序陣列
*@param big1 先序中需要建立二叉樹的部分的起始位置
*@param end1 先序中需要建立二叉樹的部分的最終位置
*@param inorder 中序陣列
*@param big2 中序中需要建立二叉樹的部分的起始位置
*@param end2 中序中需要建立二叉樹的部分的最終位置
*如:先序 big1為2,end1為5
*中序big2為3,end2為6
*保證需要建立二叉樹的先序部分裡和中序部分,它們的組成節點是一樣的。
**/public node gettreepreorderinorder(u preorder,int big1,int end1,u inorder,int big2,int end2)
public void prenode(node head) }
public void inorder(node head) }
public void printtree(nodehead)
public static void main(string srgd);
string inorder = ;
mybinarytreetree = new mybinarytree();
node head = tree.gettreepreorderinorder(preorder, 0, preorder.length-1, inorder, 0, inorder.length-1);
tree.prenode(head);
system.out.println();
tree.inorder(head);
}}
二叉樹建立(先序)
建立二叉樹可根據輸入乙個串先序 中序或後序建立,如本篇中以1 2 4 1 1 1 3 5 1 1 1為例,數字 1為空結點,先序 中序 後序沒什麼太大區別,僅僅時對結點資料賦值的時間不同,建立運用遞迴思想。遍歷可先 中 後序,也可層序遍歷。層序遍歷可以運用佇列,每pop出乙個資料,push進相應的左...
先序建立二叉樹及先序 中序 後序遍歷
先序二叉樹 先序建立二叉樹 void createbitree bitree t t bitnode malloc sizeof bitnode t data cnt t lchild null t rchild null createbitree t lchild createbitree t r...
通過先序和中序建立二叉樹
include iostream include queue using namespace std int x 1000 z 1000 struct tree void xzcreate tree t,int xl,int zl,int len for int i 0 z i zl x xl i ...