CareerCup-4.5

來源:互聯網
上載者:User

Write an algorithm to find the ‘next’ node (i e , in-order successor) of a given node in 
a binary search tree where each node has a link to its parent 

#include <iostream>  using namespace std;  typedef int Data;    struct Node  {      Node(Data d):data(d){left = right = NULL;};      Data data;      Node* left;      Node* right;    Node* parent; };struct ListNode{    ListNode(Node* n):data(n){next = NULL;};    ListNode* next;    Node* data;};  class Tree  {  public:      Tree():root(NULL){};      Node* root;      void insert(Data data, Node* node = NULL)      {          if(root == NULL)          {              root = new Node(data);            root->parent = NULL;            return;          }          if(node == NULL) node = root;          if(data == node->data)          {              return;          } else if(data < node->data) {              if(node->left == NULL)              {                node->left = new Node(data);                node->left->parent = node;                  } else {                insert(data, node->left);              }        } else {              if(node->right == NULL)              {                node->right = new Node(data);                 node->right->parent = node;             } else {                insert(data, node->right);              }        }      };    void findNext(Node* n)    {        if(n == NULL) return;        if(n->right != NULL)        {            Node *p = n->right;            while(p->left != NULL)                p = p->left;            cout<<p->data<<endl;        } else {            if(n->parent == NULL)                return;            if(n == n->parent->left)            {                cout<<n->parent->data<<endl;            } else {                Node* p = n;                while(p->parent != NULL && p == p->parent->right)                {                    p = p->parent;                }                if(p->parent != NULL)                    cout<<p->parent->data<<endl;            }        }    };};    int main()  {      Tree tree;      tree.insert(5);      tree.insert(1);      tree.insert(7);      tree.insert(4);      tree.insert(3);    Node *n = tree.root->left->right;    cout<<n->data<<endl;    tree.findNext(n);    system("pause");  };

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.