--57 offer prove safety series. The next node binary tree

Q: Given a binary tree and a node which is, find the next node in a preorder traversal order and returns. Note that the node in the tree contains not only the left and right child nodes, the parent node contains a pointer pointing to.
T:
Analysis of a node of binary tree, a total of the following cases:
1. The binary tree is empty, returning null;
2. right child node exists, a pointer is set from the right child node, along point to the left child node has been leaf node is the pointer to find the next node point;
3. node is not the root node. If the node is left child of its parent node, the parent node is returned; otherwise, continue to traverse up the parent node of its parent node, before the judge repeated, returns the result.

struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if (pNode == nullptr)
            return nullptr;
        if (pNode->right != nullptr) {
            TreeLinkNode *temp = pNode->right;
            while (temp->left != nullptr)
                temp = temp->left;
            return temp;
        }
        while (pNode->next != nullptr) {
            TreeLinkNode *temp = pNode->next;
            if (pNode == temp->left)
                return temp;
            pNode = pNode->next;
        }
        return nullptr;
    }

Guess you like

Origin www.cnblogs.com/xym4869/p/12368910.html