左子樹的節點值均小於根節點
右子樹的值均大於根節點
package tree;
public
class
node
public
node
(int data)
public
intgetdata()
public
void
setdata
(int data)
public node getleftchild()
public
void
setleftchild
(node leftchild)
public node getrightchild()
public
void
setrightchild
(node rightchild)
@override
public string tostring()
';}}
package tree;
/** * 二叉樹基本的類結構
*/public
class
binarytree
//查詢某個節點
public node find
(int data)
else
if(data > current.
getdata()
)else
}//迴圈完了,current==null說明樹里根本沒有我們要找的節點
return null;
}//插入節點
public
boolean
insert
(int data)
else
}else}}
}return
false
;//插入失敗
}//遍歷節點
//中序遍歷
public
void
midorder
(node current)
else
}//前序遍歷
public
void
preorder
(node current)
else
}//後序遍歷
public
void
afterorder
(node current)
else
}//查詢最大值和最小值
public node getmaxnode()
return maxnode;
}public node getminnode()
return minnode;
}//刪除節點
public
boolean
delete
(int data)
else
if(current == null)
}//正常迴圈結束,找到了要刪除的節點
//刪除找到的節點
if(current.
getleftchild()
== null && current.
getrightchild()
== null)
else
else
}return
true;}
else
if(current.
getleftchild()
!= null && current.
getrightchild()
== null)
else
else
}return
true;}
else
if(current.
getleftchild()
== null && current.
getrightchild()
!= null)
else
else
}return
true;}
else
else
else
} replacenode.
setleftchild
(current.
getleftchild()
);return
true;}
}public node getreplacenode
(node delnode)
if(replacenode != delnode.
getrightchild()
)return replacenode;
//我們要找的右子樹中的最小節點
}}
package tree;
public
class
binarytreetest
}
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹 修剪二叉搜尋樹
第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...