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;
    }
};
View Code

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);
         
    }

};
View Code

相关文章:

  • 2021-06-21
  • 2021-09-27
  • 2022-12-23
  • 2021-10-27
  • 2021-05-09
  • 2021-11-17
  • 2022-12-23
  • 2021-11-12
猜你喜欢
  • 2021-05-19
  • 2022-02-20
  • 2021-09-28
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案