标签:width oid 搜索 node def 二叉树 vector 中序遍历 void
题目:
解法:
题目说一棵二叉搜索树中有两个节点位置错了,要在常数空间将其改正。想到的算法就是中序遍历二叉树...
Space O(n)的方法就是自己用stack来模拟inorder traverse,然后将输出的结果存在一个vector里面,然后遍历vector找到冲突的对。
Space constant的方法就是用递归的方法进行inorder traverse,然后在遍历的过程中记录一个前驱节点,然后比较前驱节点和当前节点的值,将结果记录下来,最后交换下就行了。
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 void recoverTree(TreeNode *root) 15 { 16 TreeNode* first=NULL; 17 TreeNode* second=NULL; 18 TreeNode* prv=NULL; 19 20 treeWalk(root,prv,first,second); 21 22 //change 23 int tmp=first->val; 24 first->val=second->val; 25 second->val=tmp; 26 } 27 28 void treeWalk(TreeNode* root, TreeNode*& prv, TreeNode*& first, TreeNode*& second) 29 { 30 if(root==NULL) 31 { 32 return; 33 } 34 treeWalk(root->left,prv,first,second); 35 36 if( (prv != NULL) && (prv->val > root->val) ) 37 { 38 if(first == NULL) 39 { 40 first = prv; 41 } 42 second = root; 43 } 44 prv=root; 45 46 treeWalk(root->right,prv,first,second); 47 } 48 };
标签:width oid 搜索 node def 二叉树 vector 中序遍历 void
原文地址:https://www.cnblogs.com/ocpc/p/12817423.html