線索二叉樹是在普通二叉樹模型上建立線索後的樹模型,再建立了線索後我們可以在o(n)的時間內遍歷該樹,並且很方便的找出某個節點的前驅節點和後繼節點,我們的**首先建立一棵普通的二叉樹,然後利用遞迴的方式建立線索,並且提供乙個遍歷演算法,其中有一些細節是需要我們多加注意的。不多說了,上**
/**
* @author pc
* 線索二叉樹模型
*/public class threadtree
public node getleft()
public void setleft(node left)
public node getright()
public void setright(node right)
public int getdata()
public void setdata(int data)
public int getltag()
public void setltag(int ltag)
public int getrtag()
public void setrtag(int rtag)
}public threadtree()
/*** 首先根據乙個陣列來建立普通二叉樹
* * @param a
* n+1個資料組成的陣列,其中a[0]=-1不參與樹的建立,a[1]~a[n]代表數的節點,a[2*i]是a[i]的左子結點,
* a[2*i+1]是右子節點
*/private node buildtreebyarray(int a, int n) else
} for (int i = 1; i <= n / 2; i++)
if ((2 * i + 1 <= n) && (a[2 * i + 1] != -1))
}} return p[1]; }
/*** 遞迴的線索化過程
* pre指向前驅節點,p指向當前節點
*/private void thread(node p)
else
if(pre.right==null)
else
pre=p;
thread(p.right);
} }/**
* 真正建立二叉線索樹的函式
* 其中首先建立一棵普通二叉樹,然後再對其進行線索化
* 最後返回乙個root節點,left指向二叉樹的根節點,right指向遍歷時的最後乙個節點
* @param a
* @param n
*/public node createthreadtree(int a, int n)
else
return root; }
/*** 對中序線索二叉樹進行遍歷
* @param root
*/public void thinorder(node root)
p=p.right;
} }public static void main(string args);
threadtree thread=new threadtree();
node node=thread.createthreadtree(a, 9);
thread.thinorder(node);
}}
線索二叉樹建立及遍歷
層序輸入 中序遍歷建立線索二叉樹 利用頭節點遍歷線索二叉樹 include using namespace std typedef char elemtype define maxsize 100 enum tag 二叉鍊錶的結構建立 typedef struct bitnodebitnode,bi...
線索二叉樹遍歷
1.對二叉樹線索化之後,若結點沒有右子樹,則右子樹指向遍歷後繼結點 若沒有左子樹,則左子樹指向遍歷前驅結點。2.對線索二叉樹進行遍歷,即不斷找結點的後繼。若右指標直接指向了後繼,那直接就有了 結點右指標沒有指向後繼,即有右子節點,那就通過常規方法找到後繼。如後序線索樹後繼不好找,需要棧才能進行遍歷。...
線索二叉樹的建立和遍歷
基本概念 對於n個結點的二叉樹,在二叉鏈儲存結構中有n 1個空鏈域,利用這些空鏈域存放在某種遍歷次序下該結點的前驅結點和後繼結點的指標,這些指標稱為線索,加上線索的二叉樹稱為線索二叉樹,這種加上了線索的二叉鍊錶稱為線索鍊錶。根據線索性質的不同,線索二叉樹可分為前序線索二叉樹 中序線索二叉樹和後序線索...