标签:tree 线索 必须 ref oid treenode 元素 www 使用
题意:找出“BST”中不符合规律的两个结点。
解题思路:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 void recoverTree(TreeNode* root) { 13 stack<TreeNode*> s; 14 TreeNode* tmp=root; 15 TreeNode* t1,*t2; //指示wrong position的结点 16 bool flag=false; //判断是第一次还是第二次 17 TreeNode* pre=NULL; 18 19 while(!s.empty() || tmp!=NULL){ 20 if(tmp!=NULL){ 21 s.push(tmp); 22 tmp=tmp->left; 23 } 24 else{ 25 while(!s.empty() && s.top()->right==NULL){ 26 // 发生错误 27 if(pre!=NULL && pre->val>s.top()->val){ 28 cout<<"gg"<<endl; 29 if(flag==false){ 30 t1=pre; 31 t2=s.top(); 32 flag=true; 33 } 34 else{ 35 t2=s.top(); 36 } 37 } 38 pre=s.top(); 39 //cout<<pre->val<<endl; 40 s.pop(); 41 } 42 if(!s.empty()){ 43 // 发生错误 44 if(pre!=NULL && pre->val>s.top()->val){ 45 cout<<"gg"<<endl; 46 if(flag==false){ 47 t1=pre; 48 t2=s.top(); 49 flag=true; 50 } 51 else{ 52 t2=s.top(); 53 } 54 } 55 pre=s.top(); 56 //cout<<pre->val<<endl; 57 tmp=s.top()->right; 58 s.pop(); 59 } 60 } 61 } 62 63 int data=t1->val; 64 t1->val=t2->val; 65 t2->val=data; 66 67 } 68 };
LeetCode 99. Recover Binary Search Tree
标签:tree 线索 必须 ref oid treenode 元素 www 使用
原文地址:https://www.cnblogs.com/yy-1046741080/p/11621930.html