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...