二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子节点,同时包含指向父节点的指针。
题解:
找出二叉树所有的结点的中序遍历进行保存,遍历数组找到该节点,输出该位置的下一数据。
代码如下:
/*
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:
vector<TreeLinkNode*> innode;
void inorder(TreeLinkNode* root){
if(!root) return;
inorder(root->left);
innode.push_back(root);
inorder(root->right);
}
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
TreeLinkNode* node;
if(!pNode) return node;
TreeLinkNode* root=pNode;
while(root->next) root=root->next;
inorder(root);
for(int i=0;i<innode.size();i++){
if(pNode==innode[i])
return innode[i+1];
}
return NULL;
}
};