一、求二叉樹高度
/**
* 求二叉樹高度
*@param root
*@return
*/public
intgetheight(node root)
int l=getheight(root.leftchild);
int r=getheight(root.rightchild);
return l>r?l+1:r+1;
}
二、求二叉樹結點總數/**
* 求二叉樹結點總數
*@param root
*@return
*/public
intgetsize(node root)
return
1+getsize(root.leftchild)+getsize(root.rightchild);
}
二、遞迴交換左右子樹/**
* 交換左右子樹
*@param root
*/public
void
swapleftandright(node root)
node temp=new node();
temp=root.leftchild;
root.leftchild=root.rightchild;
root.rightchild=temp;
swapleftandright(root.leftchild);
swapleftandright(root.rightchild);
}
三、非遞迴交換左右子樹/**
* 非遞迴交換左右子樹
*@param root
*/public
void
swapleftandrightnorec(node root)
node node=root;
queuequeue=new linkedlist();
queue.add(node);
while(!queue.isempty())
if(node.rightchild!=null)
}}
四、在二叉樹中查詢某個節點/**
* 遞迴查詢二叉樹中是否存在某個節點
*@param root
*@param cnode
*@return
*/public
boolean
checknode(node root,node cnode)
else
if(root==cnode)
else
if(!existsflag&&root.rightchild!=null)
return existsflag;
}}
五、查詢兩個結點的最近父節點public node getnearsetfarther(node root,node node1,node node2)
//如果node1在node2的子樹中
if(checknode(node2, node1))
boolean oneinleft,oneinright,twoinleft,twoinright;
oneinleft=checknode(root.leftchild, node1);
oneinright=checknode(root.rightchild, node1);
twoinleft=checknode(root.leftchild,node2);
twoinright=checknode(root.rightchild, node2);
//node1和node2不在同一邊
if((oneinleft&&twoinright)||(oneinright&&oneinleft))
//node1和node2都在左邊
if(oneinleft&&twoinleft)
//node1和node2都在右邊
if(oneinright&&twoinright)
else
}
二叉樹 二叉樹的相關操作
遞迴實現 建立求樹高 求葉子數 求節點數 統計度為2的結點個數 後序輸出 先序輸出 中序輸出 交換左右子樹 include include include define true 1 define false 0 define ok 1 define error 0 define overflow ...
二叉樹操作
最近在溫習資料結構,把書中的 寫了一遍,下面是二叉樹的基本操作,包括 1 四種遍歷二叉樹的方法 前序遍歷 中序遍歷 後序遍歷和層序遍歷,其中又包括了遞迴的和非遞迴 2 兩種建立二叉樹的方法 根據二叉樹的前序和中序序列建立二叉樹和根據二叉樹的中序後序序列建立二叉樹。1.二叉樹的儲存結構 headfil...
二叉樹操作
本文章主要包括了以下內容 建立二叉樹類。二叉樹的儲存結構使用鍊錶。供操作 前序遍歷 中序遍歷 後序遍歷 層次遍歷 計算二叉樹結點數目 計算二叉樹高度。接收鍵盤錄入的二叉樹前序序列和中序序列 各元素各不相同 輸出該二叉樹的後序序列。下面是c include include include using ...