1、題目node
一、審題spa
二、分析code
給出一棵二叉搜索樹。將全部節點值加上比他大的全部節點值。blog
2、解答遞歸
思路:class
採用相似中序(左-->根-->右)遍歷的方式。實際採用 (右--> 根 --> 左)。遍歷時,統計全部遍歷的節點之和。變量
方法1、二叉樹
採用一個 Stack 進行二叉樹遍歷。同時更新節點值。搜索
public TreeNode convertBST(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); int sum = 0; TreeNode node = root; while(!stack.isEmpty() || node != null) { while(node != null) { stack.add(node); node = node.right; } node = stack.pop(); node.val += sum; sum = node.val; node = node.left; } return root; }
方法2、遍歷
① 採用一個全局變量,統計遍歷的節點值之和。
② 採用遞歸方式進行二叉樹遍歷。
int sum = 0; public TreeNode convertBST(TreeNode root) { if(root == null) return null; convertBST(root.right); root.val += sum; sum = root.val; convertBST(root.left); return root; }