51.题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
/* 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 { TreeLinkNode* getNode(TreeLinkNode* pNode){ TreeLinkNode*pre = NULL; while (pNode){ pre = pNode; pNode = pNode->left; } return pre; } public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { TreeLinkNode*tmp = pNode->next; if (tmp){//如果有父节点 if (tmp->left == pNode&&pNode->right == NULL){//如果是左节点,就返回他的爸爸 return tmp; } else if (tmp->left == pNode&&pNode->right != NULL){ return getNode(pNode->right); } if (tmp->right == pNode){//如果是右节点,就返回他的右儿子 if (pNode->right){ return getNode(pNode->right); } else if (tmp->next->left == tmp){ return tmp->next; } else if (tmp->next->right == tmp){ return NULL; } } } else{//根节点 return getNode(pNode->right); } return NULL; } };
52.题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: bool isSymmetrical(TreeNode* pRoot) { return isSymmetrical(pRoot,pRoot); } bool isSymmetrical(TreeNode* pRoot1,TreeNode* pRoot2) { if(pRoot1==NULL&&pRoot2==NULL) return true; if(pRoot1==NULL || pRoot2==NULL) return false; if(pRoot1->val!=pRoot2->val) return false; return isSymmetrical(pRoot1->left,pRoot2->right) && isSymmetrical(pRoot1->right,pRoot2->left); } };