zoukankan      html  css  js  c++  java
  • leetcode563

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left;
     *     public TreeNode right;
     *     public TreeNode(int x) { val = x; }
     * }
     */
    public class Solution
        {
            /// <summary>
            /// 遍历二叉树,存储节点列表
            /// </summary>
            Stack<TreeNode> S = new Stack<TreeNode>();
            
            /// <summary>
            /// 先序遍历二叉树
            /// </summary>
            /// <param name="node"></param>
            private void postNode(TreeNode node)
            {
                if (node != null)
                {
                    S.Push(node);
                    if (node.left != null)
                    {
                        postNode(node.left);
                    }
                    if (node.right != null)
                    {
                        postNode(node.right);
                    }
                }
            }
    
    
            /// <summary>
            /// 以node为根节点的树的val之和
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            private int SumNode(TreeNode node)
            {
                int sum = 0;
                if (node != null)
                {
                    sum += node.val;
                    if (node.left != null)
                    {
                        sum += SumNode(node.left);
                    }
    
                    if (node.right != null)
                    {
                        sum += SumNode(node.right);
                    }
                }
                return sum;
            }
    
            /// <summary>
            /// 获取每个节点的tilt值
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            private int GetTilt(TreeNode node)
            {
                if (node == null)
                {
                    return 0;
                }
                else if (node.left == null && node.right == null)
                {
                    return 0;
                }
                else
                {
                    //计算左子树sum需要遍历左子树,然后累加每个节点的值
                    var left = 0;
                    if (node.left != null)
                    {
                        left = SumNode(node.left);
                    }
                    //计算右子树sum需要遍历右子树,然后累加每个节点的值
                    var right = 0;
                    if (node.right != null)
                    {
                        right = SumNode(node.right);
                    }
                    //根节点的tilt等于左右子树sum之差,//因此需要计算左子树sum和右子树sum
                    var tilt = Math.Abs(left - right);
                    return tilt;
                }
            }
    
    
            public int FindTilt(TreeNode root)
            {
                if (root != null)
                {
                    //先遍历每个节点
                    postNode(root);
    
                    //获得节点列表
                    var list = S.ToList();
    
                    //计算每个节点的tilt,再加到一起
                    var sum = 0;
                    foreach (var l in list)
                    {
                        sum += GetTilt(l);
                    }
                    return sum;
                }
                else
                {
                    return 0;
                }
            }
        }

    https://leetcode.com/problems/binary-tree-tilt/#/description

  • 相关阅读:
    ABAP学习(10):ALV显示之function alv
    ABAP学习(11):ALV显示之OO ALV使用示例
    ABAP学习(3):屏幕显示
    ABAP学习(6):ABAP GUI和开发工具
    ABAP学习(9):时间日期操作
    ABAP学习(8):操作EXCEL
    ABAP学习(2):控制语句
    ABAP学习(5):数据库语句
    ABAP学习(4):内表
    编程经验:高性能.NET WEB开发(1)http压缩
  • 原文地址:https://www.cnblogs.com/asenyang/p/6756918.html
Copyright © 2011-2022 走看看