二叉樹題目

2021-08-08 08:52:03 字數 2918 閱讀 9703

struct treenode

treenode*left;

treenode*right;

}

遞迴解法:

如果二叉樹為空,節點個數為0

如果二叉樹不為空,那麼節點個數 = 左子樹結點個數 + 右子樹結點個數 + 1

int getnodenum(treenode*root)
如果二叉樹為空,二叉樹的深度為0

如果二叉樹不為空,二叉樹的深度 = max (左子樹深度,右子樹深度) + 1

int getdepth(treenode*root)
treenode*convert(treenode*root)

if(left!=nullptr)

treenode*right = convert(root->right);

if(right!=nullptr)

return left!=nullptr ?left :root;

//返回的總是最左邊的位置,如果左邊為空返回根結點,否則返回左邊結點

}

遞迴解法:

如果二叉樹為空或者k<1返回0;

如果二叉樹不為空並且k==1,返回1

如果二叉樹不為空並且k>1,返回左子樹中k-1層的節點個數+右子樹k-1層節點個數之和

int getnodenumkthlevel(treenode*root,int k)
1.如果二叉樹為空,返回0

2.如果二叉樹不為空,左右子樹為空返回1

3.如果二叉樹不為空,左右子樹不為空,返回左邊結點個數+右邊結點個數

int getleafnodenum(treenode*root)
首先搞清楚,結構相同;並不代表結點內的資料相同

/*空 空

空 不空

不空 空

不空 不空 :繼續判斷*/

1. 如果兩根二叉樹都為空,返回真

2. 如果兩棵二叉樹,乙個空,另乙個不空,返回假

3. 如果兩棵二叉樹都不為空,如果對應的左子樹和右子樹結構相同,返回真,其它返回假

bool structcmp(treenode*root1,treenode*root2)
int treedepth(treenode*root)

bool isbalanced_tree(treenode*root)

treenode*mirror(treenode*root)

/* 一左一右交換左右子樹,然後交換其指向,深度遞迴

*/

int mini_depth(treenode*root)

如果二叉樹的深度為h,除第h層外,其它(1~h-1)的結點數都達到最大個數,第h層所有的結點都連續集中在最左邊,這就是完全二叉樹。

按層遍歷二叉樹,當遇到第乙個結點的左子樹為空時,則該結點左右子樹必須為空,而且此結點後的結點左右子樹必須為空,否則不是完全二叉樹

bool iscompletebinary_tree(treenode*root)

}else

else

if (pnode->left != nullptr&&pnode->right == nullptr)

else

if (pnode->left == nullptr&&pnode->right != nullptr)

else}}

return result;

}

求最低公共結點,採用深度遞迴從頭結點到包含此結點的路徑,然後遍歷到開始變化的那個結點的位置就是最低公共祖先

注意:

1. 如果兩個結點分別在根節點的左右子樹中,則返回根節點

2. 如果兩個結點都在左子樹,則遞迴處理左子樹;如果兩個結點都在右子樹,則遞迴處理右子樹

bool getnodepath(treenode*root, treenode*pnode, vector

&path)

if (root == nullptr)

return

false;

/*這裡是先進行的判斷,然後在存入容器的操作,如果先直接壓入容器那麼就應該有回退的操作

遞迴結束條件,當一直沒找到,為空的時候直接返回,當找到了壓入容器,改變標記位置,返回*/

path.push_back(root);

bool found = false;

found = getnodepath(root->left, pnode, path);

//採用先序遍歷,先把根節點儲存然後往下判斷

if (!found)//如果左邊沒找到,遞迴查詢右子樹

found = getnodepath(root->right, pnode, path);

if (!found)

path.pop_back();

//這裡是右子樹操作,如果沒找到要回退,然後進行操作

return found;

}treenode* find_commonnode(treenode*root, treenode*pnode1, treenode*pnode2)

return plast;

}

遞迴解法:

1.如果二叉樹為空返回0,一種方式是包含此結點,計算左右子樹的最大深度

2.不包含此結點,計算左有子樹中最大的距離,然後從三者之間計算求出最大值

int getmaxdistance(treenode*root)

int depth(treenode*root)

二叉樹題目

include include includeusing namespace std void print postorder int n,char pre,char in n代表節點個數,pre前 in 中 post後,不建樹用void int main void return 0 根據後中求層次...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...