日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树常见面试题

發布時間:2025/3/16 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树常见面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二叉樹結構

struct BinaryTreeNode {int val;BinaryTreeNode *left;BinaryTreeNode *right; };

1、二叉樹的深度

int TreeDepth(BinaryTreeNode *root) {if(root == NULL)return 0;int leftDepth = TreeDepth(root->left);int rightDepth = TreeDepth(root->right);return (leftDepth > rightDepth) ? (leftDepth + 1) : (rightDepth + 1); }

2、二叉樹的寬度

int TreeWidth(BinaryTreeNode *root) {if(root == NULL)return 0;int maxWidth = 0;queue<BinaryTreeNode*> q;q.push(root);while(true) {int len = q.size();if(len == 0) break;while(len > 0) {BinaryTreeNode *node = q.front();q.pop();len--;if(node->left != NULL)q.push(node->left);if(node->right)q.push(node->right);}maxWidth = q.size() > maxWidth ? q.size() : maxWidth;}return maxWidth; }

3、二叉樹的鏡像

void GetMirror(BinaryTreeNode *root) {if(root == NULL)return ;if(root->left == NULL && root->right == NULL)return ;BinaryTreeNode *tmp = root->left;root->left = root->right;root->right = tmp;if(root->left != NULL)GetMirror(root->left);if(root->right != NULL)GetMirror(root->right); }

4、判斷二叉樹是否對稱

bool IsSymmetrical(BinaryTreeNode *root) {return IsSymmetrical(root, root); }bool IsSymmetrical(BinaryTreeNode *root1, BinaryTreeNode *root2) {if(root1 == NULL && root2 == NULL)return true;if(root1 == NULL || root2 == NULL)return false;if(root1->val != root2->val)return false;return IsSymmetrical(root1->left, root2->right)&& IsSymmetrical(root1->right, root2->left); }

5、判斷二叉樹是否是平衡二叉樹

bool IsBalanced(BinaryTreeNode *root, int *depth) {if(root == NULL) {*depth = 0;return true;}int left, right;if(IsBalanced(root->left, &left) && IsBalanced(root->right, &right)) {int diff = left - right;if(diff >= -1 && diff <= 1) {*depth = (left > right ? left : right) + 1;return true;}}return false; }bool IsBalanced(BinaryTreeNode *root) {int depth = 0;return IsBalanced(root, &depth); }

6、不分行從上到下打印二叉樹(所有的值一行輸出)

void PrintFromTopToBottom(BinaryTreeNode *root) {if(root == NULL)return ;queue<BinaryTreeNode *> TreeNode;TreeNode.push(root);while(!TreeNode.empty()) {BinaryTreeNode *node = TreeNode.front();TreeNode.pop();printf("%d ", node->val);if(node->left != NULL)TreeNode.push(node->left);if(node->right != NULL)TreeNode.push(node->right);} }

7、分行從上到下打印二叉樹,同一層的節點按從左到右的順序打印,每一層打印到一行。

void PrintEachRowFromTopToBottom(BinaryTreeNode *root) {if(root == NULL)return ;queue<BinaryTreeNode *> TreeNode;TreeNode.push(root);int nextLevel = 0; // 下一層節點的數目int toBePrinted = 1; // 當前層中還沒有打印的節點數while(!TreeNode.empty()) {BinaryTreeNode *node = TreeNode.front();printf("%d ", node->val);if(node->left != NULL) {TreeNode.push(node->left);++nextLevel;}if(node->right != NULL) {TreeNode.push(node->right);++nextLevel;}TreeNode.pop();--toBePrinted;if(toBePrinted == 0) {printf("\n");toBePrinted = nextLevel;nextLevel = 0;}} }

8、之字形打印二叉樹:第一層按照從左到右的順序打印,第二層按照從右到左的順序打印,第三層再按照從左到右的順序打印,以此類推。

void PrintZigzagFromTopToBottom(BinaryTreeNode *root) {if(root == NULL)return ;stack<BinaryTreeNode*> levels[2];int current = 0;int next = 1;levels[0].push(root);while(!levels[0].empty() || !levels[1].empty()) {BinaryTreeNode *node = levels[current].top();levels[current].pop();printf("%d ", node->val);if(current == 0) {if(node->left != NULL)levels[next].push(node->left);if(node->right != NULL)levels[next].push(node->right);}else {if(node->right != NULL)levels[next].push(node->right);if(node->left != NULL)levels[next].push(node->left);}if(levels[current].empty()) {printf("\n");current = 1 - current;next = 1 - next;}} }

9、二叉搜索樹的第k大節點(中序遍歷)

BinaryTreeNode *KthNode(BinaryTreeNode *root, int k) {if(root == NULL || k == 0)return NULL;return KthNodeCore(root, k); } BinaryTreeNode *KthNodeCore(BinaryTreeNode *root, int &k) {BinaryTreeNode *target = NULL;if(root->left != NULL)target = KthNodeCore(root->left, k);if(target == NULL) {if(k == 1)target = root;k--;}if(target == NULL && root->right != NULL)target = KthNodeCore(root->right, k);return target; }

?

總結

以上是生活随笔為你收集整理的二叉树常见面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本一区高清 | 性生交大全免费看 | 日日夜夜国产精品 | 91亚洲欧美 | 超碰青青操 | 国产乱人伦精品一区二区 | 久久人人爽爽人人爽人人片av | 99久久久久久久 | 久久久久久伊人 | 在线亚洲天堂 | 日本成人免费在线 | 中文字幕一区二区三区久久久 | 亚洲五月婷 | 国产91九色 | 国内免费精品视频 | 久久这里只有精品6 | 欧美日韩另类在线 | 91人妻一区二区三区 | 可以免费看污视频的网站 | 97色涩| 欧美亚洲天堂网 | 中文字幕永久在线视频 | 96精品| 欧洲综合视频 | 欧美在线免费播放 | 欧美熟妇交换久久久久久分类 | av在线免费观看不卡 | 成人黄色电影网址 | 日韩久久久久久久久 | 欧美一区二区三区国产 | 国产精品va无码一区二区 | 国产成人综合av | 久草不卡 | 成人av免费在线 | 国产精品午夜未成人免费观看 | 日韩不卡在线视频 | 国产精品51麻豆cm传媒 | 麻豆av影院 | 91欧美亚洲 | 涩av| 人妻饥渴偷公乱中文字幕 | 日本在线观看一区 | 国产精品嫩草久久久久 | 日本三级网站在线观看 | 一级片视频免费观看 | 欧美激情一区二区三区在线 | 少妇全黄性生交片 | 日日噜噜夜夜狠狠久久丁香五月 | a毛毛片 | av在线影片 | 黄色免费在线播放 | 免费黄色三级 | 久久av影院| 成人必看www. | 91精品亚洲 | aaaa黄色 | 老汉av| 久久国产乱 | 欧美丝袜一区二区三区 | 国产亚洲精品久久久久久青梅 | 天天干天天操天天插 | 人人爽人人爽人人片 | 国产精品自拍偷拍视频 | 中文字幕一区二区三区在线视频 | 亚洲女人av | 成人蜜桃视频 | av女人的天堂 | 国产精品无码一本二本三本色 | 韩国美女啪啪 | 91重口味 | 久久精品久久99 | 漂亮人妻被黑人久久精品 | 日韩一级精品 | 91精产国品一二三 | 国产日韩综合 | 成人免费91 | 亚洲欧美国产精品 | 国产无码精品在线播放 | 国产美女视频免费观看下载软件 | 午夜精品影院 | 亚洲情区| 久久av在线 | 牛牛精品一区二区 | 国产美女自慰在线观看 | 美女久久久久久久久久 | 中国女人裸体乱淫 | 欧美影视一区二区 | 人妻少妇偷人精品久久久任期 | 污污网站在线观看视频 | 亚洲熟女少妇一区 | 天天插天天色 | 国产精品国产三级国产专播品爱网 | 好吊视频一区二区三区四区 | 免费污片在线观看 | 男操女视频网站 | 国产一级片自拍 | www一起操 | 91精品91久久久中77777老牛 | 欧美亚洲视频在线观看 |