java先序中序建立二叉樹的遞迴演算法

2021-06-17 23:12:07 字數 1650 閱讀 9615

在網上找了很多知道先序中序建立二叉樹的例子,但是看不懂,所以自己耐心寫了乙個,並附有詳細的注釋。

首先描述一下大致的演算法例如: 

先序 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 ...