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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

leetcode 105. 从前序与中序遍历序列构造二叉树 c语言递归解法

發布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 105. 从前序与中序遍历序列构造二叉树 c语言递归解法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如題:

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重復的元素。例如,給出 前序遍歷 preorder =?[3,9,20,15,7] 中序遍歷 inorder = [9,3,15,20,7] 返回如下的二叉樹:3/ \9 20/ \15 7

套路題,考察你有沒有學習過這種題型。同樣的問題還有知道中序與后序構造二叉樹(leetcode 106)。我們知道,前序遍歷所得序列從左至右依次是:根節點,跟左子樹根節點.....右子樹根節點。和后序正好相反,后序遍歷所得序列從后往前依次是根節點,根右子樹根節點...左子樹根節點。因為題目保證沒有重復數字,知道了根節點,就可以從中序遍歷中找到對應下標i,根據中序遍歷性質,i左邊的數列表示左子樹,i右邊的數列表示右子樹。這樣,我們知道了根結點后,遞歸從中序數列中分別查找左子樹的根結點和右子樹根結點即可。

示例中給出的前序遍歷數列為【3,9,20,15,7】,由下面的二叉樹可以觀察到,結點3為根結點,9為3的左子樹根結點,20為3右子樹根結點。15為20左子樹根結點,7為20右子樹根結點。遞歸查找順序由此可得,先左子樹后右子樹。總的來說就是找根結點的過程。沒有看懂的同學可以結合下面的代碼看下:

//這道題和已知中序于后序遍歷求二叉樹類似,僅僅方向不同,遞歸求解即可 struct TreeNode *findSubRoot(int* preorder, int* inorder, int *preOrderEnd, int inStart, int inEnd) {int i, val;struct TreeNode *root, *left, *right;//中序序列找不到,說明是一個空節點if (inStart > inEnd)return NULL;//從前序遍歷中取出根節點的值val = preorder[*preOrderEnd];//指向下一個子樹的根節點*preOrderEnd = *preOrderEnd + 1;//找到val節點的左子樹和右子樹范圍for (i = 0; i <= inEnd; i++)if (inorder[i] == val)break;//找到val的左子樹與右子樹,順序不能反,先左后右left = findSubRoot(preorder, inorder, preOrderEnd, inStart, i - 1);right = findSubRoot(preorder, inorder, preOrderEnd, i + 1, inEnd);//組合root = (struct TreeNode *)calloc(1, sizeof(struct TreeNode));root->val = val;root->left = left;root->right = right;return root; }struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){//前序遍歷從前往后依次是根結點int preOrderEnd = 0;return findSubRoot(preorder, inorder, &preOrderEnd, 0, inorderSize - 1); }

?

=============================================================================================

Linux應用程序、內核、驅動開發交流討論群(745510310),感興趣的同學可以加群討論、交流、資料查找等,前進的道路上,你不是一個人奧^_^。

總結

以上是生活随笔為你收集整理的leetcode 105. 从前序与中序遍历序列构造二叉树 c语言递归解法的全部內容,希望文章能夠幫你解決所遇到的問題。

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