二叉樹中序遍歷的情況下,遍歷結果是所有節點依次公升序的,就是搜尋二叉樹,否則就不是。
由此我們可以對之前非遞迴版本的中序遍歷稍加修改,在列印節點的時機判斷當前節點是否大於上乙個節點,就可以判斷此二叉樹是否是搜尋二叉樹。1中序遞迴遍歷二叉樹,將結果儲存進乙個stack
2比較大小,棧頂為大,棧頂為小。
#include#include#include#includeusing namespace std;
#define len 15 //定義乙個長度
typedef int elemtype;
typedef struct bitnode
bitnode, *bitree;
typedef struct node
node,*node;
//向下遍歷,找到節點s應該插入的位置,節點有重複時,忽略這個節點
void searchtreenode(bitree &root, bitree &s) //注意:使用引用傳遞
searchtreenode(root->rchild, s);//s值大於根節點值,未到達葉子節點,繼續向右孩子遍歷
} else if (s->data < root->data)
searchtreenode(root->lchild, s);//s值小於根節點值,未到達葉子節點,繼續向左孩子遍歷 }}
//插入乙個節點,樹為空,插入節點即為根節點,否則找合適的位置插入
void insertnode(bitree &tree, bitree &s) //注意:使用引用傳遞
//二叉排序樹建立,每次增加乙個結點,插到現有的二叉樹上去
void createorderbinarytree(bitree &tree, int *a)
}
//判斷是否為搜尋二叉樹,借助中序遍歷
void midorder(bitree proot,stack& help)
bool issearchtree(bitree proot)
} return true;
}int main()
; bitree tree = null;
//建立乙個二叉樹,並中序遍歷
createorderbinarytree(tree, a);
cout<
**參考:
判斷一棵樹是否為二叉搜尋樹
中序遍歷得到的值一定是公升序的,所以我們只要在遍歷的時候實時地檢查當前元素是否大於上乙個遍歷的值 lastnum 如果小於或等於,可直接得出不是二叉搜尋樹的結論。用棧來模擬中序便利的過程。definition for a binary tree node.public class treenode ...
判斷一棵樹是否為搜尋二叉樹,是否為完全二叉樹
搜尋二叉樹 一棵樹上任何乙個節點為頭的子數,左子樹都比它小,右子樹都比它大 只要中序遍歷的結果是依次公升序的,它就是平衡二叉樹 include include using namespace std class isbstandcbt bool isbst node head else return...
判斷一棵樹是否為滿二叉樹
首先,我們要知道什麼是滿二叉樹。乙個深度為k,節點個數為 2 k 1 的二叉樹為滿二叉樹。這個概念很好理解。那麼,我們要怎麼判斷一棵樹是否為滿二叉樹呢?思路 在層序遍歷的過程中,找到第乙個非滿節點 non full node 滿節點 full node 指的是同時擁有左右孩子的節點。在找到第乙個非滿...