Node* Node::inOrder(){ //si el nodo derecho es nulo devuelve el izq (puede ser NULL) if(_right == NULL) return _left; //devuelve el nodo más a la izquierda del subarbol derecho return maxLeft(_right); }
int maxChunksToSorted(vector<int>& arr) { int n = arr.size(); vector<int> maxLeft(n), minRight(n); maxLeft[0] = arr[0]; for (int i = 1; i < n; ++i) { maxLeft[i] = max(maxLeft[i - 1], arr[i]); } minRight[n - 1] = arr[n - 1]; for (int i = n - 2; i >= 0; --i) { minRight[i] = min(minRight[i + 1], arr[i]); } int count = 1; for (int i = 0; i < n - 1; ++i) { if (maxLeft[i] <= minRight[i + 1]) ++count; } return count; }
Node* Node::maxLeft(Node* n){ if(n->getLeft() == NULL) return n; else return maxLeft(n); }