判是否是二叉排序樹,看似想到遞迴來判,因為二叉樹之類的都是遞迴定義,判定遞迴自然很好理解,結果發現掛了
if(root==null) return true;
if(root->left==null&&root->right!=null)
return (root->valright->val) && isvalidbst(root->left) && isvalidbst(root->right);
if(root->right==null&&root->left!=null)
return (root->left->valval) && isvalidbst(root->left) && isvalidbst(root->right);
if(root->left==null&&root->right==null)
return true;
return (root->left->valval) && (root->valright->val) && isvalidbst(root->left) && isvalidbst(root->right);
結果掛了,想不通,之前左右子樹空的幾種組合情況還沒考慮,因為後面還有left right 訪問val的語句。後來再看一遍定義,懂了。
雖說他是遞迴定義的,但是它是指整個左子樹都小於根,整個右子樹都大於根,如果只是左孩子右孩子小於大於根上面遞迴是沒有問題的,但是現在不行,例如上述語句會把左孩子雖然是二叉排序樹,但是有乙個最大的比根大的二叉樹包含進來,也即r->left->val< r->val, r->left->val< r->left最右下->val 這兩句退不出 r->left最右下->val val
簡單說就是a
只能乖乖中序遍歷,然後看是否單調遞增排序,還不能非遞減,因為定義是嚴格小於 大於
附上**:
bool isvalidbst(treenode *root)
p=s.top();
s.pop();
order.push_back(p->val);
p=p->right;
//if(s->right!=null)
// s.push(s->right);
//if(s->left!=null)
// s.push(s->left);
}for(int i=0;i=order.at(i+1))
return false;
}return true;
/*if(root==null) return true;
if(root->left==null&&root->right!=null)
return (root->valright->val) && isvalidbst(root->left) && isvalidbst(root->right);
if(root->right==null&&root->left!=null)
return (root->left->valval) && isvalidbst(root->left) && isvalidbst(root->right);
if(root->left==null&&root->right==null)
return true;
return (root->left->valval) && (root->valright->val) && isvalidbst(root->left) && isvalidbst(root->right);
*/}
另外還有一道回文串,一開始學程舍就接觸過的,這次不考慮非數字字母的字元,裡面還是有越界判斷又忘了,另外急於提交,連邏輯判斷語句都寫錯了= =
bool ispalindrome(string s)
else
}return true;
}
另外看到了裡面lefti
今天偶然看到部落格分析二叉樹的性質,因為擴充套件到圖的時候還是比較有用的。
1. ni 表示度數(孩子數)為i的結點個數,n為總結點數,m為邊數或總度數
n2+n1+n0=n=m+1
2n2+n1=m
兩式一減 n2-n0=-1 n0=n2+1
所以二叉樹的葉子結點(終端結點,度為0的結點) 與度為2的結點的個數總是差一
2 i層有2^(i-1) 個結點
3 n個結點二叉樹有 上界(log2(n+1)) 或下屆(log2n)+1高度
4 高度為h的二叉樹做多2^h-1個結點
5 有n+1 個空指標域 n個結點,m個邊,m=n-1 共2n個指標域 所以剩n+1個指標域,這些域也是用來建線索二叉樹,儘管想到那個繁瑣的東西就頭大= =
二叉排序樹
在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...
二叉排序樹
name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...
二叉排序樹
include include include include struct tree node void insert node struct tree node int void pre order struct tree node void in order struct tree node ...