题解 | #二叉树的下一个结点#
二叉树的下一个结点
https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e
/* struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { } }; */ class Solution { public: TreeLinkNode* zxbianli(TreeLinkNode* pNode,TreeLinkNode* node) { static TreeLinkNode* tree = nullptr; static int k=0; if (pNode) { if (pNode->left) zxbianli(pNode->left,node); if(k) { tree=pNode; k=0; } cout<<'!'<<pNode->val; if (pNode==node) k=1; if (pNode->right) zxbianli(pNode->right,node); } return tree; } TreeLinkNode* GetNext(TreeLinkNode* pNode) { static TreeLinkNode* head = nullptr; static TreeLinkNode *node=pNode; while(!head) { if(pNode->next) pNode=pNode->next; else head=pNode; } cout<<head->val<<'-'<<node->val; head=zxbianli(head,node); return head; } };
一开始想复杂了,其实这道题只需要先找到根节点,然后在中序遍历就行了.
我一开始想的是怎么不找到根节点然后找下一个,但实际上找根节点很简单,复杂度低,是一个好方法.