1. 程式人生 > >【LeetCode筆記】判斷一棵樹是否為映象

【LeetCode筆記】判斷一棵樹是否為映象

最初思路:

1.求樹的中序遍歷,存入vector;

2.判斷vector是否為為映象;

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> v;

    void get(int a){
        v.push_back(a);
    }
    
    void LDR(TreeNode *root){
        if (root==NULL)
            return;
        else{
            LDR(root->left);
            get(root->val);
            LDR(root->right);
        }
        return;
    }
    
    bool reverse(vector<int> n,int start,int end,int length){
        if (length==0||length==1)
            return true;
        if (n.at(start)!=n.at(end))
            return false;
        else{
            return reverse(n,start+1,end-1,length-2);
        }
    }
    bool isSymmetric(TreeNode* root) {
        LDR(root);
        return reverse(v,0,v.size()-1,v.size());
    }
};
錯誤原因:

中序遍歷並不能唯一確定一棵樹啊。。。

正解:

1.判斷結構是否對稱  要麼沒有左右子樹,要麼有左子樹就要有右子樹

2.判斷值是否對稱:除根節點外,左子樹的左邊和右子樹的右邊值要相同

class Solution {
public:
    bool compare(TreeNode* root1,TreeNode* root2){
        if(root1==NULL&&root2==NULL)
            return true;
        else if((root1==NULL&&root2!=NULL)||(root1!=NULL&&root2==NULL))
            return false;
        else{
            if(root1->val!=root2->val)
                return false;
            else
                return compare(root1->left,root2->right)&&compare(root1->right,root2->left);
        }
    }
    bool isSymmetric(TreeNode* root) {
        if (root==NULL)
            return true;
        if (root->left==NULL&&root->right==NULL)
            return true;
        if((root->left==NULL&&root->right!=NULL)||(root->left!=NULL&&root->right==NULL))
            return false;
        return compare(root->left,root->right);
    }
};


相關推薦

LeetCode筆記判斷是否映象

最初思路: 1.求樹的中序遍歷,存入vector; 2.判斷vector是否為為映象; /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNo

資料結構判斷是否完全二叉

完全二叉樹(Complete Binary Tree) 若設二叉樹的深度為h,除第h層外,其它各層(1~h-1)的結點數都達到最大個數,第h層所有的結點都連續集中在最左邊,這就是完全二叉樹。 完全二叉樹是由滿二叉樹而引出來的。對於深度為K的,有n個結點的二叉樹,當且僅當其每

LeetCodeSymmetric Tree 判斷是否是映象

<span style="font-size:18px;"><span style="font-size:18px;">/**LeetCode Symmetric Tree 對稱的樹 * 思路:判斷一棵樹是否對稱,1.有左子樹就要有右子樹 *

leetcode 110-判斷是否平衡二叉

平衡二叉樹的定義: 空樹或者左右子樹的高度差不超過1且左右子樹也是平衡二叉樹。 需要用到計算深度的方法: public int depth(TreeNode root) { if (r

Is It A Red-Black Tree?(判斷是否紅黑二叉

以前沒接觸過這種樹,看了別人的程式碼,加上了詳細的註釋。 思路全在註釋中。   我將測試樣例放上,以便複製。 3 9 7 -2 1 5 -4 -11 8 14 -15 9 11 -2 1 -7 5 -4 8 14 -15 8 10 -7 5 -6 8 15 -11 17

如何判斷是否的子結構

前兩天有個 朋友問到了這個這個問題,我很感興趣。 其實策略很簡單,用個佇列儲存母樹以層次遍歷的形式儲存可能的子樹的根節點, 然後對這個佇列進行遍歷,以子樹為主與當前要判斷的根節點經行比對,若遍歷完整個佇列,仍未找到,則該子樹不是所要判斷的母樹的子結構。 PS:其實也不用儲

劍指Offer系列-面試題39-2:判斷是否平衡二叉

題目:判斷一棵樹是否為平衡二叉樹 思路:根據上一題的二叉樹的深度,在遞迴過程中加上識別符號,遞迴到當前節點,判斷當前子樹是不是一個平衡二叉樹,如果不是,就把識別符號置為false,返回識別符號即可。

判斷是否二叉排序

概要 由於二叉排序樹的中序遍歷時得到的一定是個一個升序序列,我們可以根據這一性質,利用中序遍歷進行判定。 演算法 1)設定全域性變數max為無窮小。 2)若樹為空,則返回true。 3

判斷是否二叉搜尋

演算法:使用BFS,在每次入隊前判斷是否滿足BST條件。程式碼:#include <iostream>#include <queue>using namespace std;st

leetcode101. Symmetric Tree判斷是否是映象二叉

思路:轉化為求兩個二叉樹是否是映象二叉樹class Solution { //判斷一顆二叉樹是否是映象的 public boolean isSymmetric(TreeNode root) { if(root==null){

產生映象判斷是否對稱二叉

程式碼均為Python: 1. 產生樹的映象: class Solution: def Mirror(self,root): if(root): roo

二叉映象(遞迴和非遞迴)+ 判斷二叉是否是平衡二叉+ 判斷是否完全二叉

二叉樹映象(遞迴和非遞迴): // 求二叉樹的映象:非遞迴 void GetBinaryMirror_Nor() { if(_pRoot == NULL) return; stack<Node*> s; s.push(_pRoot);

LeetCode:572. Subtree of Another Tree(判斷是不是另外的子

Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree

leetcode筆記:重建二叉

【重建二叉樹】 0.題目 http://t.cn/RA636CF 1.瞭解什麼是二叉樹的前序、中序、後序三種遍歷 關於二叉樹的前序、中序、後序三種遍歷:https://blog.csdn.net/qq_33243189/article/details/80222629

LeetCode筆記Binary Tree Level Order Traversal II 二叉按層遍歷,反向輸出

題目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from

LeetCode題目記錄-11判斷二叉是否是映象的(對稱的)

Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around it

LeetCode筆記Convert Sorted Array to Binary Search Tree 通過有序數列建立二叉搜尋

題目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 思路:每一次從有序數列的中間開始提一個出來作為當前的根節點。然後其左邊

LeetCode筆記Balanced Binary Tree 高度平衡二叉

題目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tr

二叉判斷是否相同

題目連結:https://leetcode.com/problems/same-tree/#/description /** * Definition for a binary tree node.

leetcode----- Validate Binary Search Tree(判斷是否是二叉搜尋

1、題目描述 給定一棵二叉樹,判斷這棵樹是否是二叉搜尋樹。 二叉搜尋樹的定義如下: 二叉搜尋樹(Binary Search Tree),又稱二叉排序樹,它或者是一顆空樹,或者具有如下性質的樹: 若它的左子樹不為空,則左子樹上所有節點的值都小於根節點的值 若它的右子樹