题目描述链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
解题思路:此题要求完成二叉搜索树的插入操作,即给定一颗二叉搜索树以及一个节点值,要求将该节点值插入到
二叉搜索树中去,并保证插入完成后的二叉搜索树依然是一颗二叉搜索树。基于此,对于树很容易想到其可能有两种
基本解法。1.迭代法,进行插入。2.递归插入。
1.迭代法。对于迭代,只需判断当前指针和要插入节点值得大小,大于走右子树,小于走左子树,一直到当前指针为空,那么
就插入到当前的前一指针的左孩子(小于)或右孩子(大于)。
2.递归操作。如当前指针不为空,并且插入节点大于当前节点值,向当前指针的右子树进行插入,并更改其右子树。如果插入节点
小于当前节点值,向当前指针的左子树进行插入,并更改其左子树。
基于上述两种方法的解题代码如下:
1.迭代法:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* insertIntoBST(TreeNode* root, int val) { TreeNode *p=root; TreeNode *pre; while(p){ if(val>p->val){ pre=p; p=p->right; } else{ pre=p; p=p->left; } } TreeNode *temp=new TreeNode(val); if(val>pre->val){ pre->right=temp; } else{ pre->left=temp; } if(!root){ return temp; } return root; } }
2.递归法
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: TreeNode* insertIntoBST(TreeNode* root, int val) { if(root==NULL){ TreeNode *temp=new TreeNode(val); return temp; } if(val>root->val){ root->right=insertIntoBST(root->right,val); } else{ root->left=insertIntoBST(root->left,val); } return root; } };