@@ -684,7 +684,7 @@ class Solution:
684684 root.right = self .buildTree(preorder_right, inorder_right)
685685
686686 return root
687- ```
687+ ```
688688
689689106.从中序与后序遍历序列构造二叉树
690690
@@ -716,7 +716,7 @@ class Solution:
716716 root.right = self .buildTree(inorder_right, postorder_right)
717717
718718 return root
719- ```
719+ ```
720720
721721## Go
722722
@@ -816,6 +816,7 @@ var buildTree = function(preorder, inorder) {
816816
817817## C
818818106 从中序与后序遍历序列构造二叉树
819+
819820``` c
820821int linearSearch (int* arr, int arrSize, int key) {
821822 int i;
@@ -847,6 +848,7 @@ struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int po
847848```
848849
849850105 从前序与中序遍历序列构造二叉树
851+
850852```c
851853struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
852854 // 递归结束条件:传入的数组大小为0
@@ -889,5 +891,100 @@ struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int in
889891}
890892```
891893
894+ ## Swift
895+
896+ 105 从前序与中序遍历序列构造二叉树
897+
898+ ``` swift
899+ class Solution {
900+ func buildTree (_ preorder : [Int ], _ inorder : [Int ]) -> TreeNode? {
901+ return helper (preorder : preorder,
902+ preorderBegin : 0 ,
903+ preorderEnd : preorder.count ,
904+ inorder : inorder,
905+ inorderBegin : 0 ,
906+ inorderEnd : inorder.count )
907+ }
908+
909+ func helper (preorder : [Int ], preorderBegin : Int , preorderEnd : Int , inorder : [Int ], inorderBegin : Int , inorderEnd : Int ) -> TreeNode? {
910+ if preorderBegin == preorderEnd {
911+ return nil
912+ }
913+
914+ // 前序遍历数组的第一个元素作为分割点
915+ let rootValue = preorder[preorderBegin]
916+ let root = TreeNode (rootValue)
917+
918+
919+ if preorderEnd - preorderBegin == 1 {
920+ return root
921+ }
922+
923+ var index = 0 // 从中序遍历数组中找到根节点的下标
924+ if let ind = inorder.firstIndex (of : rootValue) {
925+ index = ind
926+ }
927+
928+ // 递归
929+ root.left = helper (preorder : preorder,
930+ preorderBegin : preorderBegin + 1 ,
931+ preorderEnd : preorderBegin + 1 + index - inorderBegin,
932+ inorder : inorder,
933+ inorderBegin : inorderBegin,
934+ inorderEnd : index)
935+ root.right = helper (preorder : preorder,
936+ preorderBegin : preorderBegin + 1 + index - inorderBegin,
937+ preorderEnd : preorderEnd,
938+ inorder : inorder,
939+ inorderBegin : index + 1 ,
940+ inorderEnd : inorderEnd)
941+ return root
942+ }
943+ }
944+ ```
945+
946+ 106 从中序与后序遍历序列构造二叉树
947+
948+ ``` swift
949+ class Solution_0106 {
950+ func buildTree (inorder : [Int ], inorderBegin : Int , inorderEnd : Int , postorder : [Int ], postorderBegin : Int , postorderEnd : Int ) -> TreeNode? {
951+ if postorderEnd - postorderBegin < 1 {
952+ return nil
953+ }
954+
955+ // 后序遍历数组的最后一个元素作为分割点
956+ let rootValue = postorder[postorderEnd - 1 ]
957+ let root = TreeNode (rootValue)
958+
959+ if postorderEnd - postorderBegin == 1 {
960+ return root
961+ }
962+
963+ // 从中序遍历数组中找到根节点的下标
964+ var delimiterIndex = 0
965+ if let index = inorder.firstIndex (of : rootValue) {
966+ delimiterIndex = index
967+ }
968+
969+ root.left = buildTree (inorder : inorder,
970+ inorderBegin : inorderBegin,
971+ inorderEnd : delimiterIndex,
972+ postorder : postorder,
973+ postorderBegin : postorderBegin,
974+ postorderEnd : postorderBegin + (delimiterIndex - inorderBegin))
975+
976+ root.right = buildTree (inorder : inorder,
977+ inorderBegin : delimiterIndex + 1 ,
978+ inorderEnd : inorderEnd,
979+ postorder : postorder,
980+ postorderBegin : postorderBegin + (delimiterIndex - inorderBegin),
981+ postorderEnd : postorderEnd - 1 )
982+ return root
983+ }
984+ }
985+ ```
986+
987+
988+
892989-----------------------
893990<div align =" center " ><img src =https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width =500 > </img ></div >
0 commit comments